CodeWalk

事件循环微任务执行顺序深度分析

作者:孤独的心 · 2026-05-30 12:55

请分析以下代码的执行顺序并解释V8事件循环(宏任务/微任务)的执行机制:setTimeout/Promise/async-await/process.nextTick。

回答

孤独的心

async function async1() {
  console.log('async1 start');
  await async2();
  console.log('async1 end');
}
async function async2() { console.log('async2'); }

console.log('script start');
setTimeout(() => console.log('setTimeout'), 0);
async1();
new Promise(resolve => {
  console.log('promise1');
  resolve();
}).then(() => console.log('promise2'));
console.log('script end');

// 输出: script start, async1 start, async2, promise1, script end, async1 end, promise2, setTimeout

执行机制:1)全局代码执行(宏任务);2)await后面的代码相当于.then()被推入微任务队列;3)微任务队列在宏任务间隙执行;4)先清空微任务队列,再取下一个宏任务。