Javascript .then()回调不';不要等待第一个承诺被触发
我试图在我的代码中实现承诺,但我很难理解它的某些方面——即一个承诺触发链中另一个承诺的方式。举个例子: HTML: 但是发生的是:日志立即发生,它从不等待click事件运行。为什么呢?难道第二个承诺不应该在第一个得到解决后才出现吗 日志立即发生,它从不等待单击事件运行 创建单击事件处理程序后,立即调用Javascript .then()回调不';不要等待第一个承诺被触发,javascript,Javascript,我试图在我的代码中实现承诺,但我很难理解它的某些方面——即一个承诺触发链中另一个承诺的方式。举个例子: HTML: 但是发生的是:日志立即发生,它从不等待click事件运行。为什么呢?难道第二个承诺不应该在第一个得到解决后才出现吗 日志立即发生,它从不等待单击事件运行 创建单击事件处理程序后,立即调用resolve() 在调用resolve()之前,不必等待单击 请注意,除非doSomething()涉及删除事件处理程序,否则该元素可能会再次被单击,从而导致第二次尝试解析承诺,而这将失败 日志立
resolve()
在调用resolve()
之前,不必等待单击
请注意,除非doSomething()
涉及删除事件处理程序,否则该元素可能会再次被单击,从而导致第二次尝试解析承诺,而这将失败
日志立即发生,它从不等待单击事件运行
创建单击事件处理程序后,立即调用resolve()
在调用resolve()
之前,不必等待单击
请注意,除非
doSomething()
涉及删除事件处理程序,否则该元素可能会再次被单击,从而导致第二次尝试解析承诺,但将失败。在我看来,您实际上是想在addEventListener回调中解析第一个承诺。现在,第一个承诺立即得到解决。在我看来,您实际上是想在addEventListener回调中解决第一个承诺。现在第一个承诺马上就解决了。非常感谢您的帮助,我已经在我的代码中尝试了您的解决方案,并且成功了!非常感谢您的帮助,我已经在我的代码中尝试了您的解决方案,并且成功了!
<div class="test"></div>
const testTag = document.querySelector('.test')
const firstPromise = new Promise((resolve) => {
testTag.addEventListener('click', () => {
doSomething()
})
resolve()
})
const secondPromise = () => {
firstPromise.then(() => {
setTimeout(function () {
console.log('This log happened 5 seconds after testTag was clicked')
}, 5000)
})
}
secondPromise()
const firstPromise = new Promise((resolve) => {
testTag.addEventListener('click', () => {
doSomething()
resolve()
})
})