看event loop的时候有个疑问
发布于 5 年前 作者 sankooc 4003 次浏览 来自 问答

这几天准备面试 在看到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 回复

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

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

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大概在第七轮循环里边打出来

回到顶部