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 的微任务调度,关键在于看清它如何与事件循环协作——不是“等待”,而是“安排后续工作稍后执行”。
DeepSeek Harness 源码实战:从 pre-execute 到 post-execute:AI Agent 调用工具时背后发生了什么
设计 Skill 系统,这 3 个坑我替你踩过了
ChatGLM-6B+LangChain环境部署与使用实践实用指南
模型“开源”了,就能直接拿来做 Agent 吗?
利用DeepSeek实现方式复杂Git操作的详细过程实用指南
仿生赋能·智创未来:仿生具身智能机器人技术突破与产业生态共建活动成功举办