Spec-Zone.ru › Node.js 14 LTS

Таймеры

Устойчивость: 2 - Стабильно

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

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

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

Класс: 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() несколько раз не повлияет.

Класс: Timeout

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

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

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.unref() создаёт внутренний таймер, который разбудит цикл событий Node.js. Создание слишком большого количества таких таймеров может негативно повлиять на производительность приложения Node.js.

timeout[Symbol.toPrimitive]()

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

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

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

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

setImmediate(callback[, ...args])

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

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

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

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

Этот метод имеет специальную версию для промисов, доступную с помощью util.promisify():

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]])

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

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

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

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

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

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

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

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

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

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

Этот метод имеет специальную версию для промисов, доступную с помощью util.promisify():

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() можно использовать объект AbortController для отмены таймера. При отмене возвращаемые промисы будут отклонены с ошибкой 'AbortError'.

Для setImmediate():

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

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

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

ac.abort();

Для setTimeout():

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

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

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

ac.abort();

clearImmediate(immediate)

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

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

clearInterval(timeout)

Добавлен в: v0.0.1
  • timeout <Таймаут> Объект Timeout, возвращённый методом setInterval().

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

clearTimeout(timeout)

Добавлен в: v0.0.1
  • timeout <Таймаут> Объект Timeout, возвращённый методом setTimeout().

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

© 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-v14.x/docs/api/timers.html

Spec-Zone.ru

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