微任务在每次宏任务执行完后、渲染前立即清空并同步执行;由Promise.then/catch/finally、queueMicrotask()、MutationObserver等触发,入队后等待当前同步代码结束统一处理。
微任务队列在每次宏任务执行完后、渲染前立即清空,所有排队的微任务会按顺序同步执行,直到队列为空。
微任务何时被调度
微任务由特定 API 触发,比如 Promise.then/catch/finally、queueMicrotask()、MutationObserver 的回调。它们不会立刻执行,而是被放入当前事件循环的微任务队列中,等待当前同步代码执行完毕后统一处理。
微任务的执行时机
JavaScript 引擎在以下节点检查并执行微任务队列:
- 当前宏任务(如 script 脚本、setTimeout 回调、事件处理函数)执行结束时
- 下一个宏任务开始前(但不等渲染或 I/O)
- 注意:嵌套的微任务(比如在 Promise 回调里再创建 Promise)也会被追加到同一轮微任务队列末尾,并在本轮继续执行,直到队列清空
微任务 vs 宏任务的执行顺序
典型执行流程如下:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 执行一个宏任务(例如:主脚本)
- 遇到 Promise.resolve().then(...) → 微任务入队
- 主脚本同步代码执行完 → 检查微任务队列 → 执行所有已排队微任务(包括后续新增的)
- 微任务队列清空 → 浏览器可能进行重排重绘 → 开始下一个宏任务(如 setTimeout 回调)
常见误区提醒
微任务不是“马上执行”,也不是“下一轮事件循环才执行”。它属于当前事件循环的收尾阶段:
立即学习“Java免费学习笔记(深入)”;
- Promise.then 不是异步的“延迟”,而是被推迟到微任务阶段
- 连续调用 queueMicrotask() 会累积到同一轮微任务队列,不会跨轮
- 微任务中抛出未捕获错误,会作为 rejection 终结本轮微任务,但不影响后续微任务执行(除非未处理导致全局 error)

















