为了账号安全,请及时绑定邮箱和手机立即绑定

请教各位一个问题,求解答:你真的懂promise吗?promise then执行先后顺序,高手解答一下。附上题目

请教各位一个问题,求解答:你真的懂promise吗?promise then执行先后顺序,高手解答一下。附上题目

青春有我 2019-08-14 00:00:08
问题描述下面题目执行输出顺序对吗?为什么?有大神懂得,解释解释问题出现的环境背景及自己尝试过哪些方法相关代码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推进微任务队列
                            
查看完整回答
反对 回复 2019-08-14
?
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
                            
查看完整回答
反对 回复 2019-08-14
  • 2 回答
  • 0 关注
  • 473 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信