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