我正在尝试了解有关Event Loop的Nodejs's official explanation。他们已经为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: 在评论中,马克要我解释,哪一部分令人困惑。你走了:
以下是他们的解释摘要for their first example:“当事件循环进入轮询阶段时,它有一个空队列(fs.readFile()尚未完成),因此它将等待ms的数量一直持续到达到最快的计时器的阈值...然后回到计时器阶段并运行其回调“
所以,我理解的是,相应地对于代码1,它应该如下:轮询阶段具有空队列,并且达到时间阈值。所以,首先应该运行setTimeout。然后去检查阶段,应该setImmediate运行。但它的行为并不像这样。为什么?