CNode

看event loop的时候有个疑问

问答
Ssankooc发布于7 年前最后回复7 年前3 回复5082 浏览0 收藏

这几天准备面试 在看到event loop的时候发现个问题

fs.readFile('./as.js', () => {
  console.log('io');
});
const now = Date.now();
while(true){
  if(Date.now() - 1000 > now){
    break;
  }
}
setImmediate(() => {
console.log('setImmediate')
})

就是上述的代码 理论上 输出io这段任务应该进入io callback阶段 输出setImmediate这段任务进入 check阶段 根据时间循环应该先输出 io 其次是setImmediate

但实际输出是相反的哪位大佬能解释下原因

查看回复

回复 (3)

R
rainstraw#1·7 年前

fs.readFile('./learn.js', () => { console.log('io'); }); const now = Date.now(); while(true){ if(Date.now() - 1000 > now){ break; } }

const immediate = function() { return new Promise(function(resolve, reject) { setImmediate(resolve); }) }

const loop = async function(){ for(let i=0; i<10; i++){ await immediate() console.log(i); } }

loop(); 楼主可以改一下这段代码运行一下,readFile大概在第七轮循环里边打出来

G
ganshiqingyuan#2·7 年前

你这第一轮不就把setImmediate输出了吗

J
JacksonTian#3·7 年前

任务次序仅在同一轮下比较才有意义。

参与回复
登录后即可参与回复。登录