promise.then在event loop中的执行顺序?

有关JS事件循环,发现了以往认知外的情况:

代码

console.log("script start");

setTimeout(function () {
  console.log("setTimeout");
}, 0);

Promise.resolve()
  .then(function () {
    console.log("promise1");
  })
  .then(function () {
    console.log("promise2");
  });

Promise.resolve().then(function () {
  console.log("promise3");
});

console.log("script end");

结果:

script start
script end
promise1
promise3
promise2
setTimeout

问题

那三个promise.then中的log的顺序为什么不是1、2、3?而是1、3、2?

阅读 1.7k
1 个回答

1、script start
2、把setTimeout添加到宏任务
3、Promise.resolve().then,把promise1添加到微任务
4、Promise.resolve().then,把promise3添加到微任务
5、script end
6、promise1,把promise2添加到微任务
7、promise3
8、promise2

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题