You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 17:36:01