关于promise.then执行顺序,如何理解?
Promise.resolve().then(() => {
console.log(0);
return Promise.resolve(4);
}).then((res) => {
console.log(res)
})
Promise.resolve().then(() => {
console.log(1);
}).then(() => {
console.log(2);
}).then(() => {
console.log(3);
}).then(() => {
console.log(5);
}).then(() => {
console.log(6);
})
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
早上我一眼看到的时候也一脸问号,不过找到一篇博客,你可以看下,讲的很细仔了。Promise.then链式调用顺序 - 高先生的猫
这个和promise A+规范里,.then对传递函数结果的判定有关。。文字描述有点费力,贴一下之前按照promise A+实现的简易promise代码。
先把代码里的setTimeout都当作微任务看,你return Promise.resolve(4)的操作实际走了.then里的第一个判断,.then返回的promise在reslove之前经过了两次setTimeout的等待
这是个
microtask
奇葩入队问题啊,并不涉及宏任务。我的结论是:
下边这句代码会生成两个(没有log的)微任务
return Promise.resolve(4);
我的推理很简单
第一步,搞清楚去掉这句后,两个平行的promise链是如何入队的。
只有一个条promise链的情况下,是执行到then的时候才会入队。现在有两个,测试一下
输出是 0 1 2 3 4 5 6 7
发现顺序是 上边入一个,下边入一个
拉直
我得出的结论是,两条平行promise链,是有序逐链跳跃入队的
所以加上这句后,也应该是跳跃入队的,
原题:
输出 0 1 2 3 4 5 6
经过测试,这句会被卡2次
说明这句插入了两个没有log的微任务。
验证一下:给另一条链也加一句,抵消一下
猜结果?
答案 0 1 2 3 4 5
换个位置:
答案 0 1 2 3 4 5 6 7 8 9 10
简单鲁个promise就明白了
其实是先执行的then,把回调都push到数组里,resolve的时候一个一个调。
https://segmentfault.com/a/11...