执行同步代码,这属于宏任务。html
执行栈为空,查询是否有微任务须要执行浏览器
执行全部微任务多线程
必要的话渲染 UIfrontend
而后开始下一轮 Event loop,执行宏任务中的异步代码异步
timers 阶段会执行 setTimeout 和 setInterval函数
一个 timer 指定的时间并非准确时间,而是在达到这个时间后尽快执行回调,可能会由于系统正在执行别的事务而延迟。oop
下限的时间有一个范围:[1, 2147483647] ,若是设定的时间不在这个范围,将被设置为 1。线程
I/O 阶段会执行除了 close 事件,定时器和 setImmediate 的回调cdn
idle, prepare 阶段内部实现htm
poll 阶段很重要,这一阶段中,系统会作两件事情
执行到点的定时器 执行 poll 队列中的事件 而且当 poll 中没有定时器的状况下,会发现如下两件事情
若是 poll 队列不为空,会遍历回调队列并同步执行,直到队列为空或者系统限制 若是 poll 队列为空,会有两件事发生 若是有 setImmediate 须要执行,poll 阶段会中止而且进入到 check 阶段执行 setImmediate 若是没有 setImmediate 须要执行,会等待回调被加入到队列中并当即执行回调 若是有别的定时器须要被执行,会回到 timer 阶段执行回调。
check 阶段执行 setImmediate
close callbacks 阶段执行 close 事件
而且在 Node 中,有些状况下的定时器执行顺序是随机的