Таймеры¶
В Node.js таймерами называются те функции, которые выполняют переданные им функции в какой-то момент времени в будущем и являются частью встроенного модуля Timers
. Для эмуляции JavaScript API, функции модуля доступны глобально, поэтому импорт Timers
не требуется.
Хотя реализация таймеров в Node.js и близка к тем, что имеются в браузере, но некоторые различия все же имеются. Рассмотрим подробно.
setTimeout()¶
Функция setTimeout()
выполняет переданную функцию после истечения заданного в миллисекундах интервала времени.
1 2 3 4 5 |
|
Результат работы кода.
1 2 3 |
|
При объяснении event loop уже объяснялось, что таймеры могут выполняться не через точно заданный промежуток времени - все зависит от очереди callback-функций завершенных асинхронных операций. Если время истечет в процессе выполнения callback-ов, то таймер выполнится сразу после их завершения, но после стадии check цикла событий. А это значит, что может пройти больше времени, чем было задано.
setImmediate()¶
Функция-таймер выполняет переданную ей функцию в самом конце текущей итерации event loop. Это означает, что функция выполнится после всех событий ввода/вывода.
1 2 3 4 5 |
|
Результат работы кода.
1 2 3 |
|
setInterval()¶
Функция setInterval()
используется для выполнения определенного кода множество через заданный интервал времени и принимает два параметра
- функция для выполнения;
- интервал времени в миллисекундах, через который переданная первым аргументом функция, должна быть вызвана снова.
1 |
|
Результат работы кода.
1 2 3 4 5 |
|
Как и в случае с Node.js таймером setTimeout()
, повторное выполнение функции не может быть гарантировано по истечении точно заданного интервала. Event loop может внести свои корректировки.
Отмена таймеров¶
Каждая из Node.js функций-таймеров - setTimeout()
, setImmediate()
и setInterval()
- при вызове возвращает объект timer
, который можно использовать для завершения работы таймеров, передав его соответствующей очищающей функции.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Результат работы кода.
1 2 |
|
Не забывайте отменять выполнение таймеров, когда они вам не нужны. Их хранение в оперативной памяти требует лишних ресурсов и может привести к утечке памяти.