Spec-Zone.ru › Node.js 22 LTS

Таймеры

Стабильность: 2 - Стабильный

Исходный код: lib/timers.js

Модуль timer предоставляет глобальный API для планирования вызова функций в будущем. Поскольку функции таймеров являются глобальными, для использования API не нужно вызывать require('node:timers').

Функции таймеров в Node.js реализуют API, похожий на API таймеров веб-браузеров, но используют другую внутреннюю реализацию, построенную на основе цикла событий Node.js.

Класс: Immediate

Этот объект создается внутри системы и возвращается из setImmediate(). Его можно передать в clearImmediate(), чтобы отменить запланированные действия.

По умолчанию, когда планируется немедленный вызов, цикл событий Node.js продолжает работать, пока этот вызов активен. Объект Immediate, возвращаемый из setImmediate(), экспортирует функции immediate.ref() и immediate.unref(), которые можно использовать для управления этим поведением по умолчанию.

immediate.hasRef()

Добавлено в: v11.0.0
  • Возвращает: <boolean>

Если значение равно true, объект Immediate будет поддерживать активность цикла событий Node.js.

immediate.ref()

Добавлено в: v9.7.0
  • Возвращает: <Immediate> ссылку на immediate

При вызове запрашивает, чтобы цикл событий Node.js не завершался, пока активен объект Immediate. Повторный вызов immediate.ref() не оказывает эффекта.

По умолчанию все объекты Immediate являются «ref'ed», поэтому обычно вызывать immediate.ref() не требуется, если ранее не был вызван immediate.unref().

immediate.unref()

Добавлено в: v9.7.0
  • Возвращает: <Immediate> ссылку на immediate

При вызове активный объект Immediate не будет требовать, чтобы цикл событий Node.js оставался активным. Если нет другой активности, поддерживающей работу цикла событий, процесс может завершиться до вызова функции обратного вызова объекта Immediate. Повторный вызов immediate.unref() не оказывает эффекта.

immediate[Symbol.dispose]()

Добавлено в: v20.5.0, v18.18.0
Стабильность: 1 - Экспериментальный

Отменяет немедленный вызов. Это аналог вызова clearImmediate().

Класс: Timeout

Этот объект создается внутри системы и возвращается из setTimeout() и setInterval(). Его можно передать в clearTimeout() или clearInterval(), чтобы отменить запланированные действия.

По умолчанию, когда таймер планируется с помощью setTimeout() или setInterval(), цикл событий Node.js продолжает работать, пока таймер активен. Каждый объект Timeout, возвращаемый этими функциями, экспортирует функции timeout.ref() и timeout.unref(), которые можно использовать для управления этим поведением по умолчанию.

timeout.close()

Добавлено в: v0.9.1
Стабильность: 3 - Устаревший: используйте вместо него clearTimeout().
  • Возвращает: <Timeout> ссылку на timeout

Отменяет тайм-аут.

timeout.hasRef()

Добавлено в: v11.0.0
  • Возвращает: <boolean>

Если значение равно true, объект Timeout будет поддерживать активность цикла событий Node.js.

timeout.ref()

Добавлено в: v0.9.1
  • Возвращает: <Timeout> ссылку на timeout

При вызове запрашивает, чтобы цикл событий Node.js не завершался, пока активен объект Timeout. Повторный вызов timeout.ref() не оказывает эффекта.

По умолчанию все объекты Timeout являются «ref'ed», поэтому обычно вызывать timeout.ref() не требуется, если ранее не был вызван timeout.unref().

timeout.refresh()

Добавлено в: v10.2.0
  • Возвращает: <Timeout> ссылку на timeout

Устанавливает время начала таймера на текущий момент и перепланирует его так, чтобы функция обратного вызова была вызвана по истечении ранее заданного интервала, отсчитываемого от текущего момента. Это позволяет обновить таймер без выделения памяти под новый объект JavaScript.

При использовании для таймера, функция обратного вызова которого уже была вызвана, таймер снова активируется.

timeout.unref()

Добавлено в: v0.9.1
  • Возвращает: <Timeout> ссылку на timeout

При вызове активный объект Timeout не будет требовать, чтобы цикл событий Node.js оставался активным. Если нет другой активности, поддерживающей работу цикла событий, процесс может завершиться до вызова функции обратного вызова объекта Timeout. Повторный вызов timeout.unref() не оказывает эффекта.

timeout[Symbol.toPrimitive]()

Добавлено в: v14.9.0, v12.19.0
  • Возвращает: <integer> число, которое можно использовать для ссылки на этот объект timeout

Преобразует объект Timeout в примитивное значение. Это значение можно использовать для очистки объекта Timeout. Примитивное значение можно использовать только в том же потоке, в котором был создан тайм-аут. Поэтому для использования в worker_threads его сначала необходимо передать в нужный поток. Это повышает совместимость с реализациями setTimeout() и setInterval() в браузерах.

timeout[Symbol.dispose]()

Добавлено в: v20.5.0, v18.18.0
Стабильность: 1 - Экспериментальный

Отменяет тайм-аут.

Планирование таймеров

Таймер в Node.js — это внутренняя конструкция, которая вызывает заданную функцию по истечении определенного промежутка времени. Момент вызова функции таймера зависит от использованного метода создания таймера и от того, какую еще работу выполняет цикл событий Node.js.

setImmediate(callback[, ...args])

История
Версия Изменения
v18.0.0

Теперь при передаче некорректной функции обратного вызова в аргумент callback выбрасывается ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.9.1

Добавлено в: v0.9.1

  • callback <Function> Функция, которую нужно вызвать в конце текущего прохода цикла событий Node.js
  • ...args <any> Необязательные аргументы, передаваемые при вызове callback.
  • Возвращает: <Immediate> для использования с clearImmediate()

Планирует «немедленное» выполнение callback после вызова функций обратного вызова событий ввода-вывода.

Если вызвать setImmediate() несколько раз, функции callback будут поставлены в очередь на выполнение в порядке их создания. Очередь функций обратного вызова обрабатывается целиком на каждой итерации цикла событий. Если таймер немедленного вызова поставлен в очередь из выполняемой функции обратного вызова, он сработает только на следующей итерации цикла событий.

Если callback не является функцией, будет выброшена ошибка TypeError.

У этого метода есть специальный вариант для промисов, доступный через timersPromises.setImmediate().

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

История
Версия Изменения
v18.0.0

Теперь при передаче некорректной функции обратного вызова в аргумент callback выбрасывается ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.0.1

Добавлено в: v0.0.1

  • callback <Function> Функция, которую нужно вызвать по истечении таймера.
  • delay <number> Количество миллисекунд ожидания перед вызовом callback. По умолчанию: 1.
  • ...args <any> Необязательные аргументы, передаваемые при вызове callback.
  • Возвращает: <Timeout> для использования с clearInterval()

Планирует повторный вызов callback с интервалом delay миллисекунд.

Если значение delay больше 2147483647 или меньше 1, значение delay будет установлено в 1. Нецелые значения задержки усекаются до целого числа.

Если callback не является функцией, будет выброшена ошибка TypeError.

У этого метода есть специальный вариант для промисов, доступный через timersPromises.setInterval().

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

История
Версия Изменения
v18.0.0

Теперь при передаче некорректной функции обратного вызова в аргумент callback выбрасывается ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.0.1

Добавлено в: v0.0.1

  • callback <Function> Функция, которую нужно вызвать по истечении таймера.
  • delay <number> Количество миллисекунд ожидания перед вызовом callback. По умолчанию: 1.
  • ...args <any> Необязательные аргументы, передаваемые при вызове callback.
  • Возвращает: <Timeout> для использования с clearTimeout()

Планирует однократный вызов callback через delay миллисекунд.

Вероятнее всего, вызов callback произойдет не ровно через delay миллисекунд. Node.js не гарантирует точное время вызова функций обратного вызова и порядок их вызова. Функция обратного вызова будет вызвана как можно ближе к указанному времени.

Если значение delay больше 2147483647 или меньше 1, значение delay будет установлено в 1. Нецелые значения задержки усекаются до целого числа.

Если callback не является функцией, будет выброшена ошибка TypeError.

У этого метода есть специальный вариант для промисов, доступный через timersPromises.setTimeout().

Отмена таймеров

Каждый из методов setImmediate(), setInterval() и setTimeout() возвращает объект, представляющий запланированный таймер. Эти объекты можно использовать для отмены таймера и предотвращения его срабатывания.

Для вариантов методов setImmediate() и setTimeout(), возвращающих промисы, для отмены таймера можно использовать AbortController. После отмены возвращенные промисы будут отклонены с ошибкой 'AbortError'.

Для setImmediate():

Модули JavaScript
import { setImmediate as setImmediatePromise } from 'node:timers/promises';

const ac = new AbortController();
const signal = ac.signal;

// We do not `await` the promise so `ac.abort()` is called concurrently.
setImmediatePromise('foobar', { signal })
  .then(console.log)
  .catch((err) => {
    if (err.name === 'AbortError')
      console.error('The immediate was aborted');
  });

ac.abort();
CommonJS
const { setImmediate: setImmediatePromise } = require('node:timers/promises');

const ac = new AbortController();
const signal = ac.signal;

setImmediatePromise('foobar', { signal })
  .then(console.log)
  .catch((err) => {
    if (err.name === 'AbortError')
      console.error('The immediate was aborted');
  });

ac.abort();

Для setTimeout():

Модули JavaScript
import { setTimeout as setTimeoutPromise } from 'node:timers/promises';

const ac = new AbortController();
const signal = ac.signal;

// We do not `await` the promise so `ac.abort()` is called concurrently.
setTimeoutPromise(1000, 'foobar', { signal })
  .then(console.log)
  .catch((err) => {
    if (err.name === 'AbortError')
      console.error('The timeout was aborted');
  });

ac.abort();
CommonJS
const { setTimeout: setTimeoutPromise } = require('node:timers/promises');

const ac = new AbortController();
const signal = ac.signal;

setTimeoutPromise(1000, 'foobar', { signal })
  .then(console.log)
  .catch((err) => {
    if (err.name === 'AbortError')
      console.error('The timeout was aborted');
  });

ac.abort();

clearImmediate(immediate)

Добавлено в: v0.9.1
  • immediate <Immediate> Объект Immediate, возвращаемый из setImmediate().

Отменяет объект Immediate, созданный методом setImmediate().

clearInterval(timeout)

Добавлено в: v0.0.1
  • timeout <Timeout> | <string> | <number> Объект Timeout, возвращаемый методом setInterval(), либо примитивное значение объекта Timeout в виде строки или числа.

Отменяет объект Timeout, созданный методом setInterval().

clearTimeout(timeout)

Добавлено в: v0.0.1
  • timeout <Timeout> | <string> | <number> Объект Timeout, возвращаемый методом setTimeout(), либо примитивное значение объекта Timeout в виде строки или числа.

Отменяет объект Timeout, созданный методом setTimeout().

API промисов таймеров

История
Версия Изменения
v16.0.0

Переведен из экспериментального статуса.

v15.0.0

Добавлено в: v15.0.0

API timers/promises предоставляет альтернативный набор функций таймеров, возвращающих объекты Promise. Доступ к API осуществляется через require('node:timers/promises').

Модули JavaScript
import {
  setTimeout,
  setImmediate,
  setInterval,
} from 'node:timers/promises';
CommonJS
const {
  setTimeout,
  setImmediate,
  setInterval,
} = require('node:timers/promises');

timersPromises.setTimeout([delay[, value[, options]]])

Добавлено в: v15.0.0
  • delay <number> Количество миллисекунд ожидания перед выполнением промиса. По умолчанию: 1.
  • value <any> Значение, с которым выполняется промис.
  • options <Object>
    • ref <boolean> Установите значение false, чтобы указать, что запланированный объект Timeout не должен требовать, чтобы цикл событий Node.js оставался активным. По умолчанию: true.
    • signal <AbortSignal> Необязательный объект AbortSignal, который можно использовать для отмены запланированного объекта Timeout.
Модули JavaScript
import {
  setTimeout,
} from 'node:timers/promises';

const res = await setTimeout(100, 'result');

console.log(res);  // Prints 'result'
CommonJS
const {
  setTimeout,
} = require('node:timers/promises');

setTimeout(100, 'result').then((res) => {
  console.log(res);  // Prints 'result'
});

timersPromises.setImmediate([value[, options]])

Добавлено в: v15.0.0
  • value <any> Значение, с которым выполняется промис.
  • options <Object>
    • ref <boolean> Установите значение false, чтобы указать, что запланированный объект Immediate не должен требовать, чтобы цикл событий Node.js оставался активным. По умолчанию: true.
    • signal <AbortSignal> Необязательный объект AbortSignal, который можно использовать для отмены запланированного объекта Immediate.
Модули JavaScript
import {
  setImmediate,
} from 'node:timers/promises';

const res = await setImmediate('result');

console.log(res);  // Prints 'result'
CommonJS
const {
  setImmediate,
} = require('node:timers/promises');

setImmediate('result').then((res) => {
  console.log(res);  // Prints 'result'
});

timersPromises.setInterval([delay[, value[, options]]])

Добавлено в: v15.9.0

Возвращает асинхронный итератор, генерирующий значения с интервалом delay мс. Если ref имеет значение true, необходимо явно или неявно вызвать next() асинхронного итератора, чтобы цикл событий оставался активным.

  • delay <number> Количество миллисекунд ожидания между итерациями. По умолчанию: 1.
  • value <any> Значение, возвращаемое итератором.
  • options <Object>
    • ref <boolean> Установите значение false, чтобы указать, что запланированный объект Timeout между итерациями не должен требовать, чтобы цикл событий Node.js оставался активным. По умолчанию: true.
    • signal <AbortSignal> Необязательный объект AbortSignal, который можно использовать для отмены запланированного объекта Timeout между операциями.
Модули JavaScript
import {
  setInterval,
} from 'node:timers/promises';

const interval = 100;
for await (const startTime of setInterval(interval, Date.now())) {
  const now = Date.now();
  console.log(now);
  if ((now - startTime) > 1000)
    break;
}
console.log(Date.now());
CommonJS
const {
  setInterval,
} = require('node:timers/promises');
const interval = 100;

(async function() {
  for await (const startTime of setInterval(interval, Date.now())) {
    const now = Date.now();
    console.log(now);
    if ((now - startTime) > 1000)
      break;
  }
  console.log(Date.now());
})();

timersPromises.scheduler.wait(delay[, options])

Добавлено в: v17.3.0, v16.14.0
Стабильность: 1 - Экспериментальный
  • delay <number> Количество миллисекунд ожидания перед выполнением промиса.
  • options <Object>
    • ref <boolean> Установите значение false, чтобы указать, что запланированный объект Timeout не должен требовать, чтобы цикл событий Node.js оставался активным. По умолчанию: true.
    • signal <AbortSignal> Необязательный объект AbortSignal, который можно использовать для отмены ожидания.
  • Возвращает: <Promise>

Экспериментальный API, определенный в проекте спецификации Scheduling APIs, разрабатываемом в качестве стандартного API веб-платформы.

Вызов timersPromises.scheduler.wait(delay, options) эквивалентен вызову timersPromises.setTimeout(delay, undefined, options).

import { scheduler } from 'node:timers/promises';

await scheduler.wait(1000); // Wait one second before continuing copy

timersPromises.scheduler.yield()

Добавлено в: v17.3.0, v16.14.0
Стабильность: 1 - Экспериментальный
  • Возвращает: <Promise>

Экспериментальный API, определенный в проекте спецификации Scheduling APIs, разрабатываемом в качестве стандартного API веб-платформы.

Вызов timersPromises.scheduler.yield() эквивалентен вызову timersPromises.setImmediate() без аргументов.

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v22.x/docs/api/timers.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API