Да, объект таймера явно не освобожденный и не сработавший - надо явно очищать. Пример можно посмотреть тут: Примеры правил — Wiren Board
Но, тем не менее - он не срабатывает даже если этого не делатьнаписал для попытки воспроизвести:
var test_timer_1_id = null;
qq111
startTicker("forLog", 1000)
defineRule("LogRule", {
when: function () { return timers.forLog.firing; },
then: function () {
log.info("Таймер лога сработал")
startTimer("smallTimer", 500)
timers.mainTimer.stop()
}
})
defineRule("TestRule", {
when: function () { return timers.mainTimer.firing; },
then: function () {
log.info("сработал setTimeout. Его id:", test_timer_1_id);
test_timer_1_id = null;
}
})
defineRule("SmallTimerRule", {
when: function () { return timers.smallTimer.firing; },
then: function () {
log.info("сработал smallTimer.");
test_timer_1_id = startTimer("mainTimer", 2000);
}
})
log.info("запустили все таймеры.");
Если б таймер продолжал работу - сработал бы “TestRule”. А этого не происходит.
2024-08-01 17:48:25запустили все таймеры.
2024-08-01 17:48:26Таймер лога сработал
2024-08-01 17:48:26сработал smallTimer.
2024-08-01 17:48:27Таймер лога сработал
2024-08-01 17:48:27сработал smallTimer.
2024-08-01 17:48:28Таймер лога сработал
2024-08-01 17:48:28сработал smallTimer.
2024-08-01 17:48:29Таймер лога сработал
2024-08-01 17:48:29сработал smallTimer.
2024-08-01 17:48:30Таймер лога сработал
2024-08-01 17:48:30сработал smallTimer.
2024-08-01 17:48:31Таймер лога сработал
2024-08-01 17:48:31сработал smallTimer.
Как написано в документации " clearInterval(id)
является alias’ом clearTimeout()
."
Предполагаю что создаются лишние экземпляры таймеров. Если он явно один - то целесообразно использовать setTimeout() и отслеживать его идентификатор.