Добрый день!
У меня есть устройство для подачи сигнала на который нужно кратковременно замкнуть 2 контакта.
Пытаюсь написать правило, которое при замыкании реле, через 2 секунды его размыкает.
Но что-то не получается. Никак не осилю setTimeout
Вот что у меня получается (вернее не получается):
В вашем примере таймер сбрасывается сразу после выставления и соответственно никогда не срабатывает. Таймер нужно пытаться сбросить (если он уже ранее был выставлен) перед выставлением.
Не тестировал, но так должно работать:
Как только результат функции, который под asSoonAs = true, выполняется функция после then. Как я понял - функция setTimeout - просто выполняет один раз функцию, которая передается ей в качестве аргумента, с указанной задержкой. Далее все, поэтому запоминать timer_id и делать clearTimeout не нужно, все сделает GC. Я у себя в похожем коде clearTimeout не делаю. Если не прав, поправте меня, кто знает.
Подскажите, пожалуйста, что я делаю не так.
Я создал виртуальное устройство и по изменению одного из переключателей хочу сделать управление модулем управления роллет ( WBIO-DO-R10R-4) - т.е. опускаться сколько-то секунд, потом остановиться.
но не работает…
Во-первых, при включении он сначала пишет в лог “Экран стоп” и только через 1-2 секунды включается и пишет в лог “Экран опускается”
Во-вторых, при выключении переключателя реле продолжает работать
setTimeout(callback, milliseconds) запускает однократный таймер, вызывающий при срабатывании функцию, переданную в качестве аргумента callback . Возвращает положительный целочисленный идентификатор таймера, который может быть использован в качестве аргумента функции clearTimeout() .
То есть запустили таймер, который через две секунды выполнит функцию. Запустили таймер, перешли к следующей инструкции, потом к log('Экран стоп...'); Таймер всё это время тикает, когда дотикает - выполнит log('Экран опускается...');