Node.js 与全栈 · 单选题 · 第 64 题
前端与全栈开发面试 · 第 64 题
在 Node.js 的 CommonJS 模块中,同一段同步代码里先后注册 Promise.resolve().then(cb1) 和 process.nextTick(cb2),哪个回调先执行?
- APromise.then 的回调 cb1 先执行
- Bprocess.nextTick 的回调 cb2 先执行
- C两者执行顺序随机,无法确定
- D两者都要等到 setImmediate 之后
答案
B B. process.nextTick 的回调 cb2 先执行
解析
在 CommonJS 模块中,当前操作结束后 Node 会先清空 nextTick 队列,再清空 Promise 微任务队列,两者都早于 setTimeout、setImmediate 等事件循环阶段。递归调用 nextTick 会饿死 IO,官方建议多数场景改用 queueMicrotask。在 ES 模块的顶层代码里,由于模块求值本身处于微任务中,顺序可能相反。