问题描述
下面题目执行输出顺序对吗?为什么?
有大神懂得,解释解释
问题出现的环境背景及自己尝试过哪些方法
相关代码
new Promise((resolve,reject)=>{
console.log("promise1",1)
resolve()
}).then(()=>{
console.log("then11",2)
new Promise((resolve,reject)=>{
console.log("promise2",3)
resolve();
}).then(()=>{
console.log("then21",4)
new Promise((resolve,reject)=>{
console.log("promise3",5)
resolve();
}).then(()=>{
console.log("then31",7)
}).then(()=>{
console.log("then32",9)
})
}).then(()=>{
console.log("then22",8)
})
}).then(()=>{
console.log("then12",6)
})
你期待的结果是什么?实际看到的错误信息又是什么?
感觉会输出 1->2->3->6->4->5->8->7->9。
实际结果 1->2->3->4->5->6->7->8->9。
我觉得坑可能是then会返回Promise对象,也就是在then链里面前面的then入队后,出队执行返回Promise,后面的一个then才会入队等待。
也就是说不是promise1执行=>then11入队=>then12入队=>结束=>then11出队=>promise2执行=>then21入队=>then22入队=>结束=>then12出队=>hen21出队=>...
then12要等待then11出队执行返回Promise后才能入队,同理22要等21,32要等31:
promise1执行=>then11入队=>结束 // 输出:1
=>then11出队=>promise2执行=>then21入队=>返回11promise // 输出:2=>3
=>then12入队=>结束
=>then21出队=>promise3执行=>then31入队=>返回21promise // 输出:4=>5
=>then22入队=>结束
=>then12出队=>then31出队=>返回31promise // 输出:6=>7
=>then32入队=>结束
=>then22出队=>then32出队 // 输出:8=>9