JS await 执行顺序
· 4 min read
JavaScript 中 await 的执行顺序,是面试高频题,也是写异步代码最容易踩的坑。
await后面的表达式 立即同步执行,只有等号左边的赋值才被推入微任务队列await本质是Promise.then的语法糖,每个await至少消耗 一 个微任务 tick- 循环里
await串行执行,N 个请求耗时 N 倍,必须用Promise.all并发 - 同步代码 → 微任务(await/then)→ 宏任务(setTimeout)的顺序永远不变
- 判断输出顺序的口诀:先跑同步,再清微任务,最后才轮到宏任务
await 到底干了什么
很多人以为 await 就是"等一下",其实它是 Promise.then 的语法糖。下面这两段代码几乎等价:
async function foo() {
const x = await bar();
console.log(x);
}
function foo() {
return bar().then(x => {
console.log(x);
});
}
关键点:await bar() 中,bar() 是立即同步执行的,只有拿到结果之后的赋值和后续代码才会被包进 .then 回调,扔到微任务队列里。