0

我正在尝试理解Nodejs关于事件循环的官方解释。他们已经解释了 Timers 阶段的示例,但我无法将其与他们对 setTimeout 和 setImmediate 的解释相匹配。

您能否详细解释一下 Event Loop 对以下代码段所做的所有步骤/过程/检查?

代码 1:

setTimeout(() => {
  console.log('timeout');
}, 0);

setImmediate(() => {
  console.log('immediate');
});

代码 2:

const fs = require('fs');
fs.readFile(__filename, () => {
  setTimeout(() => {
    console.log('timeout');
  }, 0);
  setImmediate(() => {
    console.log('immediate');
  });
});

PS1:在评论中,马克让我解释,哪一部分令人困惑。干得好:

以下是他们对第一个示例的解释摘要:“当事件循环进入轮询阶段时,它有一个空队列(fs.readFile() 尚未完成),因此它将等待剩余的毫秒数,直到最快达到计时器的阈值...然后返回计时器阶段并运行其回调”

所以,我的理解是,相应地对于代码1,它应该如下:轮询阶段有空队列,并且达到时间阈值。所以,首先 setTimeout 应该运行。然后去检查阶段,应该 setImmediate 运行。但它的行为不是这样的。为什么?

4

0 回答 0