Promise resolve then执行
这段代码里promise.resolve()后面的执行流程是怎样的
代码
setTimeout(() => console.log("1"));
Promise.resolve()
.then(() => {
console.log('2');
Promise.resolve()
.then(() => {
console.log('3');
})
setTimeout(() => console.log("4"));
})
.then(() => {
console.log('5');
});
结果
2
3
5
1
4
刚接触异步编程 看了看MDN一头雾水
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Promise.resolve()
实际上是 new 一个 Promise 然后马上进入 Fulfilled 状态,执行then
的时候会返回一个新的 Promise(promise2),返回新 Promise 是为了实现链式调用。如果这时已经是 Fulfilled 或 Rejected 状态,then
会生成微任务加入队列,生成的微任务中包含then
回调函数和改变 promise2 状态两部分,对应下面代码中的onFulfilled
和resolvePromise
。下面是 Mock Promise 的部分代码,如果想对 Promise 的实现有个深入了解,推荐跟着https://juejin.cn/post/694531... 敲一遍。
了解实现之后,我们来执行一下代码
() => console.log("1")
Promise.resolve()
设置为 Fulfilled 状态,这时 FulfilledCallbacks 为空无回调执行then
,这时 Promise 状态是 Fulfilled,生成一个微任务加入微任务队列,并且返回新的 Promisethen
,注意这个then
是新 Promise 的,这时新 Promise 仍是 Pending 状态,将回调函数加入 FulfilledCallbacks,再返回一个新的 Promise代码执行完毕,看看微任务队列,这时只有一个微任务,取出执行。
Promise.resolve
,then
一样的操作生成微任务推进微任务队列() => console.log("4")
代码执行完毕,看看微任务队列,这时有两个任务