购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

6.1 定时处理常用类

Node. js的timer模块公开了一个全局API,用于调度在将来某个时间段调用的函数。因为timer函数是全局变量,所以不需要调用类似require('timers')的方式来使用API。

Node. js中的timer函数实现了与Web浏览器提供的定时器API类似的API,但是使用了不同的内部实现(基于Node.js事件循环构建)。

timer模块常用的类有Immediate类和Timeout类。

6.1.1 Immediate

Immediate对象在内部创建,并从setImmediate()返回。它可以传给clearImmediate()以取消计划的操作。

默认情况下,当预定immediate时,只要immediate激活,Node.js事件循环将继续运行。setImmediate()返回的Immediate对象导出immediate.ref()和immediate.unref()函数,这些函数可用于控制此默认行为。

1.immediate.hasRef()

Immediate. hasRef()方法如果返回为true,则Immediate对象将使Node.js事件循环保持活动状态。

2.immediate.ref()

immediate. ref()方法调用时,只要Immediate处于活动状态,就会请求Node.js事件循环不会退出。多次调用immediate.ref()将无效。

默认情况下,所有Immediate对象都是ref的,通常不需要调用immediate.ref(),除非之前调用了immediate.unref()。

3.immediate.unref()

immediate. unref()方法调用时,活动的Immediate对象不需要Node.js事件循环保持活动状态。如果没有其他活动保持事件循环运行,则进程可以在调用Immediate对象的回调之前退出。多次调用immediate.unref()将无效。

6.1.2 Timeout

Timeout对象在内部创建,并从setTimeout()和setInterval()返回。它可以传给clearTimeout()或clearInterval()以取消计划的操作。

默认情况下,当使用setTimeout()或setInterval()预定定时器时,只要定时器处于活动状态,Node.js事件循环将继续运行。这些函数返回的每个Timeout对象都会导出timeout.ref()和timeout.unref()函数,这些函数可用于控制此默认行为。

1.timeout.hasRef()

timeout. hasRef()方法如果返回为true,则Timeout对象将使Node.js事件循环保持活动状态。

2.timeout.ref()

timeout. ref()方法调用时,只要Timeout处于活动状态,就会请求Node.js事件循环不会退出。多次调用timeout.ref()将无效。

默认情况下,所有Timeout对象都是ref的,通常不需要调用timeout.ref(),除非之前调用了timeout.unref()。

3.timeout.refresh()

将定时器的开始时间设置为当前时间,并重新安排定时器以在之前指定的持续时间内调用其回调,并将其调整为当前时间。这对于在不分配新JavaScript对象的情况下刷新定时器非常有用。

在已调用其回调的定时器上使用此选项将重新激活定时器。

4.timeout.unref()

timeout. unref()方法调用时,活动的Timeout对象不需要Node.js事件循环保持活动状态。如果没有其他活动保持事件循环运行,则进程可以在调用Timeout对象的回调之前退出。多次调用timeout.unref()将无效。

调用timeout.unref()会创建一个内部定时器,它将唤醒Node.js事件循环。创建太多这些定时器可能会对Node.js应用程序的性能产生负面影响。 dU/OLkU2mpNdbwAnb+15bCqu3E5d/jcoDj7vDpMBfU7ziKFlT2a0bNjCvk/CQ7v0

点击中间区域
呼出菜单
上一章
目录
下一章
×