Таймеры
Модуль timer предоставляет глобальный API для планирования вызова функций в определённый момент в будущем. Поскольку функции таймеров являются глобальными, нет необходимости вызывать require('timers') для использования API.
Функции таймеров в Node.js реализуют API, аналогичный API таймеров веб-браузеров, но используют другую внутреннюю реализацию, построенную на основе цикла событий Node.js.
Класс: Immediate
Этот объект создаётся внутри и возвращается из setImmediate(). Его можно передать в clearImmediate() для отмены запланированных действий.
Класс: Timeout
Этот объект создаётся внутри и возвращается из setTimeout() и setInterval(). Его можно передать в clearTimeout() или clearInterval() (соответственно) для отмены запланированных действий.
По умолчанию, когда таймер планируется с помощью setTimeout() или setInterval(), цикл событий Node.js будет продолжать работу, пока таймер активен. Каждый из объектов Timeout , возвращаемых этими функциями, экспортирует как timeout.ref(), так и timeout.unref() функции, которые могут использоваться для управления этим поведением по умолчанию.
timeout.ref()
При вызове запрашивается, чтобы цикл событий Node.js не завершался, пока активен объект Timeout. Вызов timeout.ref() несколько раз не повлияет.
Примечание: По умолчанию все объекты Timeout «ссылочные», что обычно делает вызов timeout.ref() ненужным, если ранее не был вызван timeout.unref().
Возвращает ссылку на объект Timeout.
timeout.unref()
При вызове активный объект Timeout не будет требовать, чтобы цикл событий Node.js оставался активным. Если нет других действий, поддерживающих цикл событий, процесс может завершиться до вызова обратного вызова объекта Timeout. Вызов timeout.unref() несколько раз не повлияет.
Примечание: Вызов timeout.unref() создаёт внутренний таймер, который разбудит цикл событий Node.js. Создание слишком большого количества таких таймеров может негативно сказаться на производительности приложения Node.js.
Возвращает ссылку на объект Timeout.
Планирование таймеров
Таймер в Node.js — это внутренняя конструкция, которая вызывает заданную функцию через определённый период времени. Время вызова функции таймера зависит от метода, использовавшегося для создания таймера, и от выполняемой циклом событий Node.js работы.
setImmediate(callback[, ...args])
-
callback<Функция> Функция, которую следует вызвать в конце текущего цикла цикла событий Node.js -
...args<любой> Необязательные аргументы, которые нужно передать при вызовеcallback.
Планирует «немедленное» выполнение callback после обратных вызовов событий ввода-вывода. Возвращает объект Immediate для использования с clearImmediate().
Когда делается несколько вызовов 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])
-
callback<Функция> Функция, которая вызывается по истечении таймера. -
delay<число> Количество миллисекунд, которое следует подождать перед вызовомcallback. -
...args<любой> Необязательные аргументы, которые нужно передать при вызовеcallback.
Планирует повторяющееся выполнение callback каждые delay миллисекунд. Возвращает объект Timeout для использования с clearInterval().
Если delay больше 2147483647 или меньше 1, delay будет установлено в 1.
Если callback не является функцией, будет выброшено исключение TypeError.
setTimeout(callback, delay[, ...args])
-
callback<Функция> Функция, которая вызывается по истечении таймера. -
delay<число> Количество миллисекунд, которое следует подождать перед вызовомcallback. -
...args<любой> Необязательные аргументы, которые нужно передать при вызовеcallback.
Планирует выполнение однократного callback через delay миллисекунд. Возвращает объект Timeout для использования с clearTimeout().
Вероятно, 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)
-
immediate<Immediate> ОбъектImmediate, возвращённый методомsetImmediate().
Отменяет объект Immediate , созданный с помощью setImmediate().
clearInterval(timeout)
-
timeout<Timeout> ОбъектTimeout, возвращённый методомsetInterval().
Отменяет объект Timeout , созданный с помощью setInterval().
clearTimeout(timeout)
-
timeout<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-v8.x/docs/api/timers.html