Eventloop

121 阅读1分钟

Eventloop 轮询 每隔一段时间查看是否发生了什么。 轮流询问

事件循环三个重要阶段

  1. timers poll check timer 将异步函数放在此刻阶段 poll阶段等待时间 check 在此阶段执行setimmediate() process.nextTick()不属于eventloop任何一个阶段,他的意义是在当前eventloop某个阶段结束后,立即执行nextTick。 js执行和开启eventloop先后顺序 因为eventloop和js执行分别属于不同的进程/v8引擎,所以并不能确定哪个是先执行的,这就引发了一个问题


经典考题 1.nodejs环境下运行 下列console.log执行顺序是怎样的

setImmediate(() => {
  console.log('setImmediate1')
  setTimeout(() => {
    console.log('setTimeout1')
  }, 0);
})

setTimeout(() => {
  console.log('setTimeout2')
  setImmediate(() => {
    console.log('setImmediate2')
  });
}, 0)

答案: setImmediate1,setTimeout2,setTimeout1,setImmediate2

chrome浏览器 2. new promise(fn) fn 是马上执行的

settimeout=> 一会儿 (宏任务) .then() 马上 (微任务) .then 是异步 .then(fn) fn是马上执行的 作者注:.then 加入到异步的队列 relove 代表执行的是 promise.then 第一个then reject只是第二个 promise和nexttick都是微任务 async和await 是promise 一种语法糖形式