问题描述下面题目执行输出顺序对吗?为什么?有大神懂得,解释解释问题出现的环境背景及自己尝试过哪些方法相关代码newPromise((resolve,reject)=>{console.log("promise1",1)resolve()}).then(()=>{console.log("then11",2)newPromise((resolve,reject)=>{console.log("promise2",3)resolve();}).then(()=>{console.log("then21",4)newPromise((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。
2 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
昨天还看到别人在讲这个,我把他文章给你吧,我觉得已经讲得很不错了。地址:执行顺序,最重要的是要了解事件循环,宏任务,微任务的区别,然后就是究竟什么时候才会把then推进微任务队列
MMMHUHU
TA贡献1834条经验 获得超8个赞
我觉得坑可能是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
添加回答
举报
0/150
提交
取消