Eventloop 轮询 每隔一段时间查看是否发生了什么。 轮流询问
事件循环三个重要阶段
- 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 一种语法糖形式