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

Node.js事件循环中微任务在宏任务队列间的处理机制问询

Node.js事件循环中微任务在宏任务队列间的处理机制问询

嘿,我来给你掰扯清楚Node.js事件循环里宏任务和微任务的处理逻辑哈!

首先得先把宏任务的几个阶段捋明白,Node.js的事件循环拆分成了好几个宏任务阶段(也叫宏任务队列),它们会按固定顺序循环处理:

  • timers:负责执行setTimeout、setInterval这类定时器触发的回调
  • pending callbacks:处理一些系统级的回调,比如TCP连接出错后的错误回调
  • idle/prepare:这是Node内部自用的阶段,咱们日常开发基本碰不到它
  • poll:这是最核心的阶段,主要处理I/O相关的回调,还会在这里等待新的事件触发
  • check:专门处理setImmediate注册的回调
  • close callbacks:处理资源关闭相关的回调,比如socket.on('close')这类

每个事件循环的迭代过程中,这些阶段是按上面的顺序依次执行的,每个阶段都对应一个回调队列,轮到某个阶段时,就会处理该队列里的回调任务。

重点说你关心的微任务处理时机:我之前特意确认过这个逻辑——在当前宏任务阶段的每一个回调执行完成之后,Node.js都会立刻把所有待执行的微任务(比如process.nextTick、Promise.then这类)全部处理完毕,等微任务队列清空了,才会继续处理当前阶段的下一个宏任务回调。只有当整个当前阶段的宏任务队列都处理完,并且所有微任务也都执行干净之后,事件循环才会切换到下一个宏任务阶段。

举个直观的例子:如果timers阶段有两个setTimeout回调,第一个回调执行完后,哪怕有一堆Promise.then等着,也会先把这些微任务全跑完,再去执行第二个setTimeout回调;等两个定时器回调都处理完,要是还有新的微任务产生,也会先清掉,之后才会进入pending callbacks阶段。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:23:00