【发布时间】:2023-02-03 15:49:15
【问题描述】:
function loop() {
// Anything you want to run in a loop can be here
setImmediate(loop);
}
loop();
在这种情况下,setImmediate回调正在调用另一个setImmediate,其回调最终进入队列(“检查”阶段)。因此loop()重复运行
事件循环的每次迭代是否只运行一个 setImmediate 回调?即 loop() 每次事件循环迭代只运行一次吗?
我经常听说 setImmediate 用于在事件循环的下一个“滴答”或迭代运行回调
但是,关于事件循环的官方 Node 文档 (https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/) 说:
“通常,当事件循环进入给定阶段时,它将执行特定于该阶段的任何操作,然后在该阶段的队列中执行回调,直到队列耗尽或执行了最大数量的回调。”
这让我认为在事件循环的每次迭代中可能会运行多个 setImmediate 回调。如果是这种情况,我们怎么知道每个“tick”执行了多少setImmediate回调?
谢谢你的帮助!
【问题讨论】:
-
这里有 2 种情况:在同一执行中安排多个回调 (
setImmediate(cb1); setImmediate(cb2)) 和您公开setImmediate(() => { cb1(); setImmediate(cb2); })的递归情况。第一种情况显然会在同一帧中安排cb1和cb2(在节点 <=10 中,它甚至不会让 Promise 回调在其间执行)。第二种情况将在其自己的框架中执行每个回调,让其他阶段在其间做自己的事情。
标签: javascript node.js event-loop setimmediate