1. async/await 与微任务调度机制
async/await 是如何与微任务调度机制协作的?await 后面的代码何时执行?
- async 函数返回 Promise 与状态包装
- await 挂起函数、恢复时排入微任务
- 每次 await 都产生微任务跳点的执行时序
async 函数内部执行同步代码直到第一个 await,之后函数挂起,await 表达式求值完成后,函数体的剩余部分被调度为微任务继续执行;async 函数的返回值会被包装为 Promise,内部抛错导致 Promise 拒绝。await 的语义细节:await 的值若不是 Promise 会被 Promise.resolve 包装,恢复执行一定发生在当前宏任务内所有同步代码与既有微任务之后(每次 await 都是一次微任务跳点),因此多个 await 之间存在"同步代码优先"的时序保证。工程上:await 链中每步错误可用 try/catch 统一捕获(async 内部同步错误也转为拒绝);注意不要把 await 用于同步值(多余微任务)或遗忘 await 导致并发副作用。
本题考察 async/await 与事件循环的衔接。核心是"await 恢复走微任务、每次 await 一个跳点"的调度语义,能画出一条代码的微任务执行时间线即证明掌握;补充错误传播(async 内 throw 变 rejection)与工程注意点使答案完整。