Node. js的timer模块公开了一个全局API,用于调度在将来某个时间段调用的函数。因为timer函数是全局变量,所以不需要调用类似require('timers')的方式来使用API。
Node. js中的timer函数实现了与Web浏览器提供的定时器API类似的API,但是使用了不同的内部实现(基于Node.js事件循环构建)。
timer模块常用的类有Immediate类和Timeout类。
Immediate对象在内部创建,并从setImmediate()返回。它可以传给clearImmediate()以取消计划的操作。
默认情况下,当预定immediate时,只要immediate激活,Node.js事件循环将继续运行。setImmediate()返回的Immediate对象导出immediate.ref()和immediate.unref()函数,这些函数可用于控制此默认行为。
Immediate. hasRef()方法如果返回为true,则Immediate对象将使Node.js事件循环保持活动状态。
immediate. ref()方法调用时,只要Immediate处于活动状态,就会请求Node.js事件循环不会退出。多次调用immediate.ref()将无效。
默认情况下,所有Immediate对象都是ref的,通常不需要调用immediate.ref(),除非之前调用了immediate.unref()。
immediate. unref()方法调用时,活动的Immediate对象不需要Node.js事件循环保持活动状态。如果没有其他活动保持事件循环运行,则进程可以在调用Immediate对象的回调之前退出。多次调用immediate.unref()将无效。
Timeout对象在内部创建,并从setTimeout()和setInterval()返回。它可以传给clearTimeout()或clearInterval()以取消计划的操作。
默认情况下,当使用setTimeout()或setInterval()预定定时器时,只要定时器处于活动状态,Node.js事件循环将继续运行。这些函数返回的每个Timeout对象都会导出timeout.ref()和timeout.unref()函数,这些函数可用于控制此默认行为。
timeout. hasRef()方法如果返回为true,则Timeout对象将使Node.js事件循环保持活动状态。
timeout. ref()方法调用时,只要Timeout处于活动状态,就会请求Node.js事件循环不会退出。多次调用timeout.ref()将无效。
默认情况下,所有Timeout对象都是ref的,通常不需要调用timeout.ref(),除非之前调用了timeout.unref()。
将定时器的开始时间设置为当前时间,并重新安排定时器以在之前指定的持续时间内调用其回调,并将其调整为当前时间。这对于在不分配新JavaScript对象的情况下刷新定时器非常有用。
在已调用其回调的定时器上使用此选项将重新激活定时器。
timeout. unref()方法调用时,活动的Timeout对象不需要Node.js事件循环保持活动状态。如果没有其他活动保持事件循环运行,则进程可以在调用Timeout对象的回调之前退出。多次调用timeout.unref()将无效。
调用timeout.unref()会创建一个内部定时器,它将唤醒Node.js事件循环。创建太多这些定时器可能会对Node.js应用程序的性能产生负面影响。