await触发的微任务在当前宏任务结束前入队,但需等该宏任务彻底完成后才执行;若await右侧Promise已settled,则立即入队,否则待其状态变更后入队,且与Promise.then同优先级、同微任务队列。
await 不是简单“暂停函数”,而是把后续代码包装成微任务,在当前宏任务末尾排队执行。
当执行到 await promise 时:
await 后续代码和 Promise.prototype.then 回调都属于微任务,进入同一微任务队列,按入队顺序执行(FIFO):
await Promise.resolve(); console.log('a'); 和 Promise.resolve().then(() => console.log('b')) 中,'a' 和 'b' 的打印顺序取决于谁先入队;async 函数遇到 await 时会返回一个 pending 的 Promise 并立即让出线程,当前宏任务继续向下执行或结束:
立即学习“Java免费学习笔记(深入)”;
setTimeout(fn, 0) 推送的是宏任务,而 await 推送的是微任务:
await Promise.resolve(); console.log('micro'); 一定早于 setTimeout(() => console.log('macro'), 0); 打印;理解 await 的微任务调度,关键在于看清它如何与事件循环协作——不是“等待”,而是“安排后续工作稍后执行”。
ubuntu20.04怎么使用蓝牙连接手机互传文件?
ubuntu系统怎么选择最佳服务器?
5Mware虚拟机安装Ubuntu 16.04.5 图文详解
用 Pi Agent 连接 Codex 或 Claude 官方账号有封号风险吗?
Pi Agent 使用 Codex、Claude 或 Gemini OAuth 会导致账号被封吗?
AI Agent 为什么更喜欢命令行?CLI 与 GUI 的真正分工是什么?