Spec-Zone.ru › Node.js 24 LTS

Таймеры

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

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

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

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

Класс: Immediate

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

По умолчанию, когда запланировано выполнение immediate, цикл событий Node.js продолжает работать, пока immediate активен. Объект 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 имеют ссылку на цикл событий, поэтому обычно вызывать immediate.ref() не требуется, если ранее не был вызван immediate.unref().

immediate.unref()

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

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

immediate[Symbol.dispose]()

История
Версия Изменения
v24.2.0

Больше не является экспериментальным.

v20.5.0, v18.18.0

Добавлено в: v20.5.0, v18.18.0

Отменяет immediate. Это аналог вызова 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 имеют ссылку на цикл событий, поэтому обычно вызывать 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]()

История
Версия Изменения
v24.2.0

Больше не является экспериментальным.

v20.5.0, v18.18.0

Добавлено в: v20.5.0, v18.18.0

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

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

Таймер в 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 ставятся в очередь на выполнение в порядке создания. Вся очередь функций обратного вызова обрабатывается при каждой итерации цикла событий. Если таймер immediate поставлен в очередь из выполняющейся функции обратного вызова, он сработает только при следующей итерации цикла событий.

Если 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 или равно NaN, значение 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 или равно NaN, значение 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(), или примитивное значение primitive объекта Timeout в виде строки или числа.

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

clearTimeout(timeout)

Добавлено в: v0.0.1
  • timeout <Timeout> | <string> | <number> Объект Timeout, возвращаемый методом setTimeout(), или примитивное значение primitive объекта 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-v24.x/docs/api/timers.html

Spec-Zone.ru

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