Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript .then()回调不';不要等待第一个承诺被触发_Javascript - Fatal编程技术网

Javascript .then()回调不';不要等待第一个承诺被触发

Javascript .then()回调不';不要等待第一个承诺被触发,javascript,Javascript,我试图在我的代码中实现承诺,但我很难理解它的某些方面——即一个承诺触发链中另一个承诺的方式。举个例子: HTML: 但是发生的是:日志立即发生,它从不等待click事件运行。为什么呢?难道第二个承诺不应该在第一个得到解决后才出现吗 日志立即发生,它从不等待单击事件运行 创建单击事件处理程序后,立即调用resolve() 在调用resolve()之前,不必等待单击 请注意,除非doSomething()涉及删除事件处理程序,否则该元素可能会再次被单击,从而导致第二次尝试解析承诺,而这将失败 日志立

我试图在我的代码中实现承诺,但我很难理解它的某些方面——即一个承诺触发链中另一个承诺的方式。举个例子:

HTML:

但是发生的是:日志立即发生,它从不等待click事件运行。为什么呢?难道第二个承诺不应该在第一个得到解决后才出现吗

日志立即发生,它从不等待单击事件运行

创建单击事件处理程序后,立即调用
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()
  })
})