定时器模块,提供了定时器功能,是全局api,基于Node.js事件循环构建的。
分为immediate类,timeout类。主要方法有ref(),unref(),不要退出Node循环,要退出循环。
setImmediate(fun):微任务当前队列末尾执行,它是在 I/O 事件的回调之后被触发,执行顺序类似于promise.then()。
setInterval(),定时器, setTimeout(cb, 0) === setTimeout(cb, 1);
setTimeout(),延时器。
Node.js的事件循环:Node.js有6个阶段,每个阶段都有一个要执行的队列,当队列耗尽才进入下一个阶段
1,times定时器阶段,此阶段执行定时器和延时器。
2,pending callback:执行延迟到下一个循环迭代的I / O回调。
3,idle,prepare(libuv内部使用)。
4,poll 阶段,任何异步方法(除timer,close,setImmediate之外)完成时,都会将其callback加到poll queue里,并立即执行。
5,check 阶段,setImmediate()
在这里调用回调。
6,close callbacks(执行关闭请求的回调,如socket.on('close', ...))