promise的then的链式调用顺序不是按照先后顺序的吗?为什么以下代码的顺序有点不一样?
new Promise((resolve,reject)=>{
console.log("promise1")
resolve()
}).then(()=>{
console.log("then1-1")
new Promise((resolve,reject)=>{
console.log("promise2")
resolve()
}).then(()=>{
console.log("then2-1")
}).then(()=>{
console.log("then2-2")
})
}).then(()=>{
console.log("then1-2")
})
/*
运行结果:
promise1
then1-1
promise2
then2-1
then1-2
then2-2
*/
同样的,我的问题也就是:第一个外层的then的状态是什么情况下,第二个外层的then才会调用呢?
1、外层promise1执行,打印promise1,把then1-1追加到microtasks,此时microtasks为[then1-1]
2、外层then1-1中的回调函数执行,打印then1-1,此时microtasks为[]
3、内层promise1执行,打印promise2,把then2-1追加到microtasks,此时microtasks为[then2-1]
4、外层then1-1执行结束,把then1-1追加到microtasks,此时microtasks为[then2-1, then1-2]
5、内层then2-1中的回调函数执行,打印then2-1,把then2-2追加到microtasks,此时microtasks为[then1-2, then2-2]
6、外层then1-2中的回调函数执行,打印then1-2,此时microtasks为[then2-2]
7、内层then2-2中的回调函数执行,打印then2-2,此时microtasks为[]