当我们在 Promise 解决之前调用 .then 时到底发生了什么?
What happens exactly when we call .then before a Promise is resolved?
var promise1 = new Promise(resolve => setTimeout(resolve, 5000, 123));
setTimeout(_ => {
promise1.then(console.log)
}, 500);
then
告诉 promise 完成后要做什么。你应该总是期望在它被解决之前调用它。但是,考虑到开发人员很聪明,承诺是否在此之前 resolves 可以被调用并不重要。
所提供的函数将在 promise 解析后排队并触发。它还将 return 一个新的承诺,该承诺将通过上述功能的 return 值来实现或拒绝。
如果承诺已经确定,函数将在事件循环的下一个时间点被触发。
在您的示例中,提供的函数仍会在做出承诺后 5 秒记录它,即在调用第二次超时后 4.5 秒。
var promise1 = new Promise(resolve => setTimeout(resolve, 5000, 123));
setTimeout(_ => {
promise1.then(console.log)
}, 500);
then
告诉 promise 完成后要做什么。你应该总是期望在它被解决之前调用它。但是,考虑到开发人员很聪明,承诺是否在此之前 resolves 可以被调用并不重要。
所提供的函数将在 promise 解析后排队并触发。它还将 return 一个新的承诺,该承诺将通过上述功能的 return 值来实现或拒绝。
如果承诺已经确定,函数将在事件循环的下一个时间点被触发。
在您的示例中,提供的函数仍会在做出承诺后 5 秒记录它,即在调用第二次超时后 4.5 秒。