在Promise then方法中返回Promise对象时的执行顺序



代码为:

Promise.resolve().then(() => {
console.log(0);
return Promise.resolve(4);
}).then((res) => {
console.log(res)
})
Promise.resolve().then(() => {
console.log(1);
}).then(() => {
console.log(2);
}).then(() => {
console.log(3);
}).then(() => {
console.log(5);
}).then(() =>{
console.log(6);
})

,结果为:0 1 2 3 4 5 6.

为什么log 4log 3之后?在.then方法中返回promise object时发生了什么特殊的事情?

Javascript运行一个事件循环。

这是我的猜测。

Promise.resolve()创建一个承诺,它将在下一个迭代中被解决。每个block都将在前一个block完成后的下一次迭代中执行。下面是执行顺序:

迭代1:创建了2个承诺(命名为A和B),将在迭代2中解析

迭代2:承诺A解决。承诺B解析

迭代3:执行承诺A的then块,输出0并创建一个新的承诺(命名为C),该承诺将在迭代4中被解析。执行Promise B的第一个then块,输出1。

迭代4:执行第二个承诺B的then块,输出2。Promise C解析。(由于承诺C在承诺B之后被添加到事件循环中,承诺B在承诺C之前解析)

迭代5:执行Promise B的第三个then块,输出3。执行Promise C的then块,输出4.

第6次迭代:执行承诺B的第四个then块,输出5。

迭代7:执行Promise B的第五个then块,输出6。

最新更新