Node.js 微任务:Promise 与 process.nextTick
深入理解微任务队列,掌握 Promise.then 和 process.nextTick 的执行时机。 · 难度:入门 · +15XP
什么是微任务?
微任务(Microtask)是事件循环中更高优先级的任务队列。在 Node.js 中,微任务主要包括:process.nextTick 回调、Promise.then/catch/finally 回调、以及 queueMicrotask。
微任务 vs 宏任务
| 类型 | 示例 | 执行时机 |
|---|---|---|
| 微任务 | Promise.then, nextTick, queueMicrotask | 当前宏任务结束后立即执行 |
| 宏任务 | setTimeout, setInterval, I/O, setImmediate | 事件循环的下一阶段 |
process.nextTick 的特殊性
process.nextTick 不属于微任务的标准定义,但优先级高于 Promise 回调。它会在事件循环的当前阶段结束前执行,即使其他微任务已经存在。
Promise.resolve().then(() => console.log('Promise'));
process.nextTick(() => console.log('nextTick'));
// 输出:nextTick (先于 Promise)微任务队列处理规则
在每次宏任务完成后,事件循环会清空微任务队列。如果微任务中添加了新的微任务,它们会在当前批次中继续执行,直到队列为空。
process.nextTick(() => {
console.log('第一个 nextTick');
process.nextTick(() => console.log('嵌套 nextTick'));
});
console.log('同步代码');
// 输出:同步代码 -> 第一个 nextTick -> 嵌套 nextTick练习提示
修改右侧代码,添加一个 Promise 和一个 process.nextTick,观察它们与 setTimeout 的执行顺序。