作为新成员,我无法评论主题,这就是我必须创建新主题的原因。但通过这种方式,我可以澄清问题,所以希望你们能帮助我。
我已经阅读了很多关于Node.js事件循环的内容。我根据以下材料塑造了对它的理解:
Node.js Event Loop
What the heck is the event loop anyway?
Why setImmediate() execute before fs.readFile() in Nodejs Event Loop's works?
(请随意提出其他信息和准确的材料)
特别是第三个环节,让我更了解。但请记住这一点,我无法理解以下代码的事件循环行为:
var fs = require('fs');
var pos = 0;
fs.stat(__filename, function() {
console.log(++pos + " FIRST STAT");
});
fs.stat(__filename, function() {
console.log(++pos + " LAST STAT");
});
setImmediate(function() {
console.log(++pos + " IMMEDIATE")
})
console.log(++pos + "LOGGER");
令人惊讶的是,对我来说输出如下:
LOGGER
FIRST STAT
LAST STAT
IMMEDIATE
screenshot of my terminal, showing output as well as node version
screenshot of output from online code compiler rextester.com
记住事件循环Diagram,我想流程应该如下:
问题1:我的分析/预测的哪一部分是错误的?
问题2:此时,Event Loop是否开始工作?它是从应用程序的开头(即第1阶段)开始的吗?或者在解释器读取整个代码后启动,所有同步任务都在Call Stack中完成,而Call Stack需要更多任务,即在3-4阶段之间?
提前致谢,
答案 0 :(得分:0)
在https://nodejs.org/docs/v8.9.3/api/timers.html#timers_setimmediate_callback_args中说:
安排"立即"在 I / O事件后执行回调'回调。返回Immediate以与clearImmed一起使用
步骤:
如果I / O在5.
结束,则LOGGER在FIRST STAT和LAST STAT之前执行。