Работа таймеров в правилах WB

Да, объект таймера явно не освобожденный и не сработавший - надо явно очищать. Пример можно посмотреть тут: Примеры правил — 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() и отслеживать его идентификатор.

1 лайк