以下输出顺序多少 (setTimeout 与 promise 顺序)
更多描述
setTimeout(() => console.log(0));
new Promise((resolve) => {
  console.log(1);
  resolve(2);
  console.log(3);
}).then((o) => console.log(o));
 
new Promise((resolve) => {
  console.log(4);
  resolve(5);
})
  .then((o) => console.log(o))
  .then(() => console.log(6));Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 396
1 => 3 => 4 => 2 => 5 => 6 => 0
Author 回答者: xiaochena
以下输出顺序多少 (setTimeout 与 promise 顺序)
setTimeout(() => console.log(0));
new Promise((resolve) => {
  console.log(1);
  resolve(2);
  console.log(3);
})
  .then((o) => console.log(o))
  .then(() => console.log(7));
 
new Promise((resolve) => {
  console.log(4);
  resolve(5);
})
  .then((o) => console.log(o))
  .then(() => console.log(6));- 第一次循环
- 宏任务队列:
JavaScript代码。打印console.log(1);、console.log(3)、console.log(4); - 微任务队列:[ 
then((o) => console.log(o)) | [resolve(2)]、then((o) => console.log(o)) | [resolve(5)]] - 延时队列:
setTimeout(() => console.log(0)); - 执行微任务队列:
then((o) => console.log(o)) | [resolve(2)]、then((o) => console.log(o)) | [resolve(5)]、其中then((o) => console.log(o)) | [resolve(5)]执行完成后又向当前微任务队列中加入一个任务then(() => console.log(6));。 - 执行微任务队列:[ 
then((o) => console.log(o)) | [resolve(2)]、then((o) => console.log(o)) | [resolve(5)]]。其中 这两个任务又分别陆续返回2个微任务、因此当前微任务队列的执行顺序是 1、[then((o) => console.log(o)) | [resolve(2)]、then((o) => console.log(o)) | [resolve(5)]]。2、[then(() => console.log(7))、then(() => console.log(6))]。 第二次循环:检查延时队列setTimeout(() => console.log(0));打印console.log(0) 
 - 宏任务队列: