Promise 链式调用顺序引发的思考 作者:心_c2a2

原链接:https://www.jianshu.com/p/aa3d8b3adde3

需要注意的结论

1、当执行 then 方法时,如果前面的 promise 已经是 resolved 状态,则直接将回调放入微任务队列中

2、当一个 promise 被 resolve 时,会遍历之前通过 then 给这个 promise 注册的所有回调,将它们依次放入微任务队列中

难懂的点

 

 

一开始以为是外部第二个then要等第一个then返回的Promise的then执行完了才会执行

但实际上是内部then1执行后,外部then1已经相当于resolve了,所以直接执行了then2,所以正确顺序就是

1 2 3 4 6 5 7

拓展

 

 

 

 

 

 虽然有点不大理解,但是可以总结一下:如果then返回了promise,则下一个then需要等这个内部promise的then的状态是resolved的时候才会执行,而外部promise的第二个then需要等内部promise的第二个then的状态是resolved才会执行,所以实际上不需要纠结太多内部的结构,只需要明白

 

当内部promise第n个then的状态resolved时,才会执行外部promise的第n+1个then

 

最后附上最后一题答案

 其实查看了Promise源码后可以发现,其实每个Promise的then只是注册进一个数组,所以才会有这种执行顺序

不知道靠不靠谱的源码解析文章 https://www.jianshu.com/p/43de678e918a

posted @ 2020-08-25 15:40  re-saika  阅读(197)  评论(0)    收藏  举报