代码为:
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 4
在log 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。