Node.js v10.4.1 文档


定时器#

查看英文版参与翻译

稳定性: 2 - 稳定的

timer 模块暴露了一个全局的 API,用于在某个未来时间段调用调度函数。 因为定时器函数是全局的,所以使用该 API 无需调用 require('timers')

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

Immediate 类#

查看英文版参与翻译

该对象是内部创建的,并从 setImmediate() 返回。 它可以传给 clearImmediate() 以便取消预定的动作。

immediate.ref()#

查看英文版参与翻译

When called, requests that the Node.js event loop not exit so long as the Immediate is active. Calling immediate.ref() multiple times will have no effect.

By default, all Immediate objects are "ref'ed", making it normally unnecessary to call immediate.ref() unless immediate.unref() had been called previously.

immediate.unref()#

查看英文版参与翻译

When called, the active Immediate object will not require the Node.js event loop to remain active. If there is no other activity keeping the event loop running, the process may exit before the Immediate object's callback is invoked. Calling immediate.unref() multiple times will have no effect.

Timeout 类#

查看英文版参与翻译

该对象是内部创建的,并从 setTimeout()setInterval() 返回。 它可以传给 clearTimeout()clearInterval() 以便取消预定的动作。

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

timeout.ref()#

查看英文版参与翻译

调用时,只要 Timeout 处于活动状态就要求 Node.js 事件循环不要退出。 多次调用 timeout.ref() 没有效果。

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

返回 Timeout 的一个引用。

timeout.refresh()#

查看英文版参与翻译

Sets the timer's start time to the current time, and reschedules the timer to call its callback at the previously specified duration adjusted to the current time. This is useful for refreshing a timer without allocating a new JavaScript object.

Using this on a timer that has already called its callback will reactivate the timer.

timeout.unref()#

查看英文版参与翻译

当调用时,活动的 Timeout 对象不要求 Node.js 事件循环保持活动。 如果没有其他活动保持事件循环运行,则进程可能在 Timeout 对象的回调被调用之前退出。 多次调用 timeout.unref() 没有效果。

注意:调用 timeout.unref() 会创建一个内部定时器,它会唤醒 Node.js 的事件循环。 创建太多这类定时器可能会对 Node.js 应用程序的性能产生负面影响。

返回对 Timeout 的一个引用。

预定定时器#

查看英文版参与翻译

Node.js 中的计时器是一种会在一段时间后调用给定的函数的内部构造。 定时器函数何时被调用取决于用来创建定时器的方法以及 Node.js 事件循环正在做的其他工作。

setImmediate(callback[, ...args])#

查看英文版参与翻译

预定立即执行的 callback,它是在 I/O 事件的回调之后被触发。 返回一个用于 clearImmediate()Immediate

当多次调用 setImmediate() 时,callback 函数会按照它们被创建的顺序依次执行。 每次事件循环迭代都会处理整个回调队列。 如果一个立即定时器是被一个正在执行的回调排入队列的,则该定时器直到下一次事件循环迭代才会被触发。

如果 callback 不是一个函数,则抛出 TypeError

注意:此方法具有可用util.promisify()提供的promises常用变体:

const util = require('util');
const setImmediatePromise = util.promisify(setImmediate);

setImmediatePromise('foobar').then((value) => {
  // value === 'foobar' (passing values is optional)
  // This is executed after all I/O callbacks.
});

// or with async function
async function timerExample() {
  console.log('Before I/O callbacks');
  await setImmediatePromise();
  console.log('After I/O callbacks');
}
timerExample()

setInterval(callback, delay[, ...args])#

查看英文版参与翻译

  • callback <Function> 当定时器到点时要调用的函数。
  • delay <number> 调用 callback 之前要等待的毫秒数。
  • ...args <any> 当调用 callback 时要传入的可选参数。

预定每隔 delay 毫秒重复执行的 callback。 返回一个用于 clearInterval()Timeout

delay 大于 2147483647 或小于 1 时,delay 会被设为 1

如果 callback 不是一个函数,则抛出 TypeError

setTimeout(callback, delay[, ...args])#

查看英文版参与翻译

  • callback <Function> 当定时器到点时要调用的函数。
  • delay <number> 调用 callback 之前要等待的毫秒数。
  • ...args <any> 当调用 callback 时要传入的可选参数。

预定在 delay 毫秒之后执行的单次 callback。 返回一个用于 clearTimeout()Timeout

callback 可能不会精确地在 delay 毫秒被调用。 Node.js 不能保证回调被触发的确切时间,也不能保证它们的顺序。 回调会在尽可能接近所指定的时间上调用。

注意:当 delay 大于 2147483647 或小于 1 时,delay 会被设为 1

如果 callback 不是一个函数,则抛出 TypeError

注意:此方法具有可用util.promisify()提供的promises常用变体:

const util = require('util');
const setTimeoutPromise = util.promisify(setTimeout);

setTimeoutPromise(40, 'foobar').then((value) => {
  // value === 'foobar' (passing values is optional)
  // This is executed after about 40 milliseconds.
});

取消定时器#

查看英文版参与翻译

setImmediate()setInterval()setTimeout() 方法每次都会返回表示预定的计时器的对象。 它们可用于取消定时器并防止触发。

不可能取消使用setImmediate()setTimeout()的promisified变体创建的定时器。

clearImmediate(immediate)#

查看英文版参与翻译

取消一个由 setImmediate() 创建的 Immediate 对象。

clearInterval(timeout)#

查看英文版参与翻译

取消一个由 setInterval() 创建的 Timeout 对象。

clearTimeout(timeout)#

查看英文版参与翻译

取消一个由 setTimeout() 创建的 Timeout 对象。