Node.js v21.7.2中nextTick与Promise回调执行顺序疑问
Node.js v21中process.nextTick比Promise回调后执行的原因
你遇到的现象是Node.js版本迭代带来的微任务执行顺序变化,核心原因如下:
新旧版本的规则差异
在Node.js v17及更早版本中,process.nextTick队列的优先级确实高于Promise微任务队列——同步代码执行完毕后,会先清空所有process.nextTick回调,再处理Promise的then/catch/finally回调。但从Node.js v18开始,顶层模块(直接运行的脚本)中的微任务执行顺序被调整:同步代码执行完成后,会先执行Promise微任务队列,再处理process.nextTick队列。你使用的v21.7.2属于v18之后的版本,因此会看到promise先输出,再是nextTick。非顶层上下文仍遵循旧逻辑
这个顺序变化仅适用于顶层模块。如果把代码放到异步回调(比如setTimeout、事件监听回调)中,process.nextTick的优先级依然高于Promise微任务:
setTimeout(() => { Promise.resolve().then(() => console.log('promise')) process.nextTick(() => console.log('nextTick')) })
运行这段代码,输出会回到你预期的顺序:
nextTick promise
- 视频内容的局限性
你观看的视频中提到nextTick始终优先,是基于旧版本Node.js的行为,当时还没有顶层微任务顺序的调整,因此和你当前版本的表现不符。
内容的提问来源于stack exchange,提问作者prevail
相关产品推荐
相关产品推荐

