【问题标题】:What happens exactly when we call .then before a Promise is resolved?当我们在 Promise 解决之前调用 .then 会发生什么?
【发布时间】:2021-09-14 00:11:13
【问题描述】:
var promise1 = new Promise(resolve => setTimeout(resolve, 5000, 123));

setTimeout(_ => { 
  promise1.then(console.log) 
}, 500);

【问题讨论】:

标签: javascript asynchronous ecmascript-6 promise es6-promise


【解决方案1】:

一旦 promise 解决,提供的函数将排队并被触发。它还将返回一个新的 Promise,该 Promise 将通过上述函数的返回值被履行或拒绝。

如果承诺已经完成,函数将在事件循环的下一个滴答声中触发。

在您的示例中,提供的函数仍会在做出承诺后 5 秒记录它,即调用第二次超时后的 4.5 秒。

【讨论】:

    【解决方案2】:

    then 告诉 promise 完成后要做什么。您应该始终期望在它解决之前调用它。但是,鉴于开发人员很聪明,因此可以调用 Promise 是否在此之前解决并不重要。

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 2017-09-24
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多