Управляемые таймеры
Вместо глобальных таймеров Node.js используйте методы mod: Toolbox учитывает их и очищает при выгрузке. Сетевой интерфейс также очищает timeout/interval при событии leave_game, включая выход персонажа и закрытие игрового подключения.
| Метод | Назначение |
|---|---|
mod.setTimeout(callback, delay, ...args) |
Однократный вызов после задержки в миллисекундах |
mod.clearTimeout(handle) |
Отмена конкретного timeout |
mod.setInterval(callback, delay, ...args) |
Повторяющийся вызов |
mod.clearInterval(handle) |
Отмена конкретного interval |
mod.clearAllTimeouts() |
Отмена всех timeout этого интерфейса |
mod.clearAllIntervals() |
Отмена всех interval этого интерфейса |
mod.setImmediate(callback, ...args) |
Отложенный вызов в цикле событий |
mod.clearImmediate(handle) |
Отмена immediate |
mod.clearAllImmediates() |
Отмена всех immediate |
Используйте соответствующую функцию отмены: не передавайте interval в clearTimeout. activeTimeouts и activeIntervals — наборы Set для просмотра; не изменяйте их вручную.
Пример
const timer = mod.setTimeout(() => {
mod.log('One second later');
}, 1000);
// If the action becomes unnecessary:
mod.clearTimeout(timer);
Таймер не гарантирует точный момент выполнения: callback запускается, когда цикл событий свободен. В проверенной сборке задержки приводятся к числу, значение больше 2147483647 вызывает RangeError. Используйте конечные неотрицательные значения. setImmediate очищается при выгрузке, но не входит в обработчик очистки timeout/interval на leave_game.
Источники: doc/mod/timers.md, bin/mod.js.