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
前端远比想象中的还要复杂,需要学习的还有很多,脚踏实地记录好遇到的麻烦与经验,三省吾身,才能慢慢积累经验。

浙公网安备 33010602011771号