这几天准备面试 在看到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
但实际输出是相反的哪位大佬能解释下原因
你这第一轮不就把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大概在第七轮循环里边打出来