星海

Node.js 与全栈 · 单选题 · 第 64 题

前端与全栈开发面试 · 第 64 题

在 Node.js 的 CommonJS 模块中,同一段同步代码里先后注册 Promise.resolve().then(cb1) 和 process.nextTick(cb2),哪个回调先执行?

  1. APromise.then 的回调 cb1 先执行
  2. Bprocess.nextTick 的回调 cb2 先执行
  3. C两者执行顺序随机,无法确定
  4. D两者都要等到 setImmediate 之后

答案

B B. process.nextTick 的回调 cb2 先执行

解析

在 CommonJS 模块中,当前操作结束后 Node 会先清空 nextTick 队列,再清空 Promise 微任务队列,两者都早于 setTimeout、setImmediate 等事件循环阶段。递归调用 nextTick 会饿死 IO,官方建议多数场景改用 queueMicrotask。在 ES 模块的顶层代码里,由于模块求值本身处于微任务中,顺序可能相反。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。