【发布时间】:2022-10-06 01:10:27
【问题描述】:
请看下面的代码:
Promise.resolve().then(() => console.log(\"promise1 resolved\"));
Promise.resolve().then(() => console.log(\"promise2 resolved\"));
Promise.resolve().then(() => {
console.log(\"promise3 resolved\");
process.nextTick(() => {
console.log(\"Inner Next tick\");
});
});
Promise.resolve().then(() => console.log(\"promise4 resolved\"));
setImmediate(() => console.log(\"set immediate1\"));
setImmediate(() => console.log(\"set immediate2\"));
process.nextTick(() => console.log(\"next tick1\"));
process.nextTick(() => console.log(\"next tick2\"));
setTimeout(() => console.log(\"set timeout\"), 0);
这段代码的输出是:
next tick1
next tick2
promise1 resolved
promise2 resolved
promise3 resolved
promise4 resolved
Inner Next tick
set timeout
set immediate1
set immediate2
我无法理解的是为什么 innerTextTick 的回调,即 console.log(\"Inner Next tick\") 在 setTimeout 之前执行。 根据我的理解,首先将执行 nextTick 队列,nextTick 1 和 2,然后是所有已解决的 Promises,然后到 timers 阶段,这正如预期的那样。但是在第一个承诺中,我在 nextTick 队列中注册了一个新的 callBack,它应该在事件循环再次到达 nextTick 队列之后调用,即在计时器阶段之后。 但是为什么事件循环从承诺微任务队列返回而不是进入下一个阶段,即定时器队列。
标签: node.js promise event-loop