Добрый день! В связи с изоляцией друг от друга фрагментов кода правил, размещенных в разных файлах, и отсутствием (по моим данным) механизма объявления функций для нескольких файлов правил, остается фактически единственный “механизм” реализации такого функционала - через виртуальные устройства. В связи с чем возникает вопрос: всегда ли правила исполняются в одном потоке?
Т.е. в варианте, когда у виртуального устройства “VirtDev” есть два текстовых свойства Text1 и Text2, а также pushbutton Start. гарантировано ли атомарное исполнение прописанной в тексте файла правил последовательности с присвоением свойствам текстовых значений и следующим за ним присвоением значения true для pushbutton?
Все это - естественно, при отсутствии правил на текстовые свойства.
Или возможны варианты прерывания исполнения последовательности?
В том случае если выполняется в одной функции друг за другом - то на очередь публикации станут в таком же порядке. Ну и опубликуются в брокер. Но на самом деле, пожалуй, никто не исследовал именно порядок публикации,
Какой от этого практический толк и где может иметь значение?
Pushbutton, кстати, не нажимается из правил.
Вот тут не очень понятно. Хотя я не настоящий программист, конечно.
Но: любой скрипт js выполняется интерпретатором один раз, после этого остаются только уже объекты. Такие как таймеры, обработчики. Да, в процессе работы тем же обработчиком подписки MQTT whenChanged или функцией таймера могут быть порождены какие-то дополнительные объекты. Или удалены существующие. То есть код уже не используется никак.
Но вот обращение к фрагменту - к сожалению не понимаю.
Попробую переформулировать. Код правил размещен в нескольких разных файлах. В некоторых файлах также присутствуют описания вспомогательных функций, но они доступны только в пределах соответствующих файлов.
Условно говоря, есть некая параметризованная функция типа
var someFunc = function (Param1, Param2, Param3) {...}
Функция описана в одном файле. А эту функцию необходимо вызывать из разных правил, точнее - из правил, размещенных в разных файлах. Дублировать описание в каждом - не вариант. Как это реализовать?