事件循环微任务执行顺序深度分析
请分析以下代码的执行顺序并解释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)先清空微任务队列,再取下一个宏任务。