Timers
该 timer
模块公开了一个全局 API,用于调度函数在未来某个时间段内调用。由于计时器函数是全局函数,因此无需调用即可 require('node:timers')
使用该 API。
Immediate
此对象在内部创建并从 返回 setImmediate()
。可将其传递 clearImmediate()
给以取消计划的操作。
默认情况下,当安排了即时事件时,只要即时事件处于活动状态,Node.js 事件循环就会继续运行。Immediate
返回的对象 setImmediate()
导出 immediate.ref()
和 immediate.unref()
函数,可用于控制此默认行为。
immediate.hasRef()
如果为真,该 Immediate
对象将保持 Node.js 事件循环处于活动状态。
immediate.ref()
调用时,要求只要处于 活动状态,Node.js 事件循环就不会 Immediate
退出。多次调用 immediate.ref()
将不起作用。
默认情况下,所有 Immediate
对象都是“被引用的”,因此通常不需要调用,immediate.ref()
除非 immediate.unref()
之前已经调用过。
immediate.unref()
调用时,活动 Immediate
对象将不需要 Node.js 事件循环保持活动状态。如果没有其他活动保持事件循环运行,则进程可能会在 Immediate
调用对象的回调之前退出。immediate.unref()
多次调用不会产生任何效果。
Timeout
setTimeout()
此对象在内部创建并从和 返回 setInterval()
。可以将其传递给 clearTimeout()
或 clearInterval()
以取消计划的操作。
timeout.refresh()
将计时器的开始时间设置为当前时间,并重新安排计时器以在之前指定的持续时间内调用其回调(该持续时间已调整为当前时间)。这对于在不分配新 JavaScript 对象的情况下刷新计时器非常有用。
在已经调用其回调的计时器上使用此功能将重新激活该计时器。
调度计时器
Node.js 中的计时器是一种内部构造,它会在一段时间后调用给定函数。计时器函数的调用时间取决于创建计时器的方法以及 Node.js 事件循环正在执行的其他工作。
setImmediate(callback[, ...args])
callback
| 此 Node.js事件循环结束时调用的函数...args
| 调用时传递的可选参数callback。- 返回:
<Immediate>
用于clearImmediate()
callback
安排I/O 事件后回调的“立即”执行。
当多次调用时 setImmediate()
,callback
函数将按照创建顺序排队等待执行。整个回调队列在每次事件循环迭代中都会被处理。如果即时计时器在正在执行的回调中排队,则该计时器直到下一次事件循环迭代才会被触发。
如果 callback
不是一个函数,则抛出 TypeError
。
setInterval(callback[, delay[, ...args]])
callback
| 计时器到时调用的函数。delay
| 调用之前等待的毫秒数callback。``默认值: 1
。...args
| 调用时传递的可选参数callback。
- 返回:
<Timeout>
用于clearInterval()
callback
安排每 delay
毫秒重复执行。
当 delay
大于 2147483647
或小于 1
,delay
将设置为 1
。非整数延迟将被截断为整数。
setTimeout(callback[, delay[, ...args]])
callback
| 计时器到时调用的函数。delay
| 调用之前等待的毫秒数callback。``默认值: 1
。...args
| 调用时传递的可选参数callback。
- 返回:
<Timeout>
用于clearTimeout()
callback
安排几毫秒后执行一次性操作 delay
.
可能 callback
不会在几毫秒内被调用 delay
。Node.js 不保证回调的确切触发时间,也不保证其顺序。回调将尽可能接近指定的时间被调用。
取消计时器
setImmediate()
、setInterval()
和方法 setTimeout()
分别返回代表已安排的计时器的对象。这些方法可用于取消计时器并阻止其触发。
clearImmediate(immediate)
取消 Immediate
由 setImmediate()
创建的对象。
clearInterval(timeout)
取消 Timeout
由 setInterval()
创建的对象。
clearTimeout(timeout)
取消 Timeout
由 setTimeout()
创建的对象。
计时器 Promises API
API timers/promises
提供了一组可返回Promise对象的替代计时器函数。可通过 访问 API require('node:timers/promises')
。
const {
setTimeout,
setImmediate,
setInterval,
} = require('node:timers/promises');
timersPromises.setTimeout([delay[, value[, options]]])
delay
| 履行承诺前需等待的毫秒数。默认值: 1
。value
| 实现承诺的值。options
:ref
| 设置为false
,表示计划任务Timeout 不需要 Node.js 事件循环保持活动状态。默认值: true
。signal
| 一个可选项AbortSignal
,可用于取消预定的Timeout。