Spec-Zone.ru › Node.js 10 LTS

Таймеры

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

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

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

Класс: Immediate

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

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

immediate.ref()

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

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

По умолчанию все объекты Immediate имеют "ref", что обычно делает ненужным вызов 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.ref()

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

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

По умолчанию все объекты Timeout имеют "ref", что обычно делает ненужным вызов 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.

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

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

setImmediate(callback[, ...args])

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

Планирует "немедленное" выполнение callback после обратных вызовов событий ввода-вывода.

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

Если 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.
  • ...args <любой> Необязательные аргументы, которые нужно передать при вызове callback.
  • Возвращает: <Timeout> для использования с clearInterval()

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

Когда delay больше 2147483647 или меньше 1, значение delay устанавливается в 1.

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

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

Добавлена в: v0.0.1
  • callback <Функция> Функция, которая будет вызываться по истечении таймера.
  • delay <число> Количество миллисекунд, которое нужно подождать, прежде чем вызвать callback.
  • ...args <любой> Необязательные аргументы, которые нужно передать при вызове callback.
  • Возвращает: <Timeout> для использования с 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(), невозможно.

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

Spec-Zone.ru

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