Здравствуйте!
Я написал скрипт, в котором правило по обработке окончания таймера располагается сразу после объявления таймера. А программа туда доходит, если кнопку нажал. Получается, что это правило переопределяется несколько раз, сколько нажали - столько и определяется. Это не окажет вредного воздействия на устойчивость работы? Ничего где-нибудь не переполнится?
Я так поступил, чтобы код был более читаемым, тк. этот таймер сработать должен единожды и потом я его останавливаю.
if (dev [self.OUTPUT] == 1 && !f_Dimming){
log (logPreff + "команда диммирования? ожидание времени непрерывного удержания");
if (timers[dimmPrepTimeoutName] != undefined){timers[dimmPrepTimeoutName].stop();}
if (timers[dimmIntervalName] != undefined){timers[dimmIntervalName].stop();}
startTimer(dimmPrepTimeoutName,2000);
timers[dimmPrepTimeoutName].name = dimmPrepTimeoutName;
defineRule(self.RN + "_dimmPrepTimeoutName",{ // вот это правило
when: function(){return timers[dimmPrepTimeoutName].firing;},
then: function(){
log (logPreff + "начинаю диммирование");
Выглядит так, что каждое вновь создаваемое правило, пусть даже и с тем же именем, будет дополнительно отъедать память под себя. И через несколько сотен нажатий движок правил аварийно завершит работу.
а никак нельзя “перезаписать” правило? Вы же за простой читаемый код?) Так вот если я буду выносить обработчики в какую-то другую кучу мало будет понятно что к чему…
Думаю, возможности перезаписать правило нет. Надо как-то вам другими средствами пробовать решать задачу. Простота и читаемость хороши для отладки, но если они задачу не решают…
давайте попробуем обходные.
Я создаю в цикле несколько правил. Присваиваю этим правилам уникальные имена. Через переменную, заранее они мне не известны, они определяются установками при вызове объекта, создающего эти правила. Они инициализируются и работают. Но если я хочу в лог вынести информацию о работе этого правила, то обращаюсь к переменной, которая это правило называет. При этом имена меняются и правила называются верно, а вот при выводе в лог (при отработке правила), в переменной , она ведь ссылочная, остается последнее значение. Я решил, что раз напрямую через переменную вытащить имя не могу, было бы здорово, вытащить его из контекста уже работающего правила.
так эта переменная называется одинаково. Я же написал.
Есть цикл. В этом цикле создаются однотипные правила с разным набором вх. данных. Если я внутри пишу var rule_name = preff+“ABC”, то это имя присваивается правилу, но при вызове этого правила, в этой переменной (rule_name) остается последнее из цикла значение. Переменная - ссылочный тип.
это возможно, я ведь определяю в правиле порядковый номер из массива входных данных, значит, могу и имя найти, это теоретически. Но все это как-то криво, костыльно. И еще не факт, что получится, на самом деле, надо пробовать…