Как можно избежать пересоздания PersistentStorage в wb-rules?

Здравствуйте! Столкнулся с такой вот проблемой, когда писал правила на WB8 (версия wb-rules последняя, я думаю):
Перед определениями правил в файле сценария я инициализирую различные переменные, в том числе создаю хранилище (new PersistentStorage). Насколько я понимаю “переинициализация” всех этих переменных (т.е полная перезагрузка сценария) происходит только при ручном сохранении файла сценария внутри веб интерфейса.
Вопрос возникает в том, каким образом мог бы я создать хранилище раз и потом его не пересоздавать, дабы не терять переменные в нем?
Я думал создать глобальные переменные (в том числе хранилище) в другом файле; он бы пересохранялся горазде реже чем основной файл с самими правилами, а при пересохранении основного файла хранилище бы не создавалось заново. Однако, это уже давно так не работает, с версии 2.0 и надо создавать модуль, например.
Вариант с модулем для этой задачи кажется странным, хотя, учитывая module.static может будет рабочим. Прототип глобального объекта так вообще является “грязным методом”.

Хотелось бы все равно спросить совета о том, как возможно эффективно решить эту задачку, так как, фактически, мне нужно просто один раз создать хранилище, а далее только вносить в него переменные и менять их

Добрый день!
Если я верно понял ваш вопрос, вы хотите избежать переопределения значений глобальных переменных в хранилище каждый раз, как выполняется правило?
Смотрите, new PersistentStorage создает объект-хэндл для доступа к хранилищу и не создает само хранилище заново, если оно уже было создано. Фактически же данные сохраняются в файл и там остаются.
Вы можете создать хранилище в отдельном правиле, выполнить его один раз, а затем это правило отключить. При этом все остальные правила, создавая внутри себя объект var ps = new PersistentStorage(“global-storage”, {global: true}); будут иметь доступ ко всем переменным из него, поскольку они один раз уже были сохранены в нем.

Как проверить (на примере из нашей документации):

  1. Создайте правило rules1.js:
var ps = new PersistentStorage("global-storage", {global: true});
ps["foo"] = "bar";
  1. Сохраните его. Затем отключите в списке правил.
  2. Создайте правило rules2.js:
var ps = new PersistentStorage("global-storage", {global: true});
log(ps["foo"]);
  1. Сохраните его. В отладочной консоли появится сообщение bar
  2. Перезагрузте движок правил – в отладочной консоли снова появится сообщение bar
1 лайк

Спасибо большое! Переделал как вы сказали и все отлично работает
Неправильно понял изначально, как new работает в этом контексте

Замечательно! Спасибо, что обратили внимание – это значит, что этот момент нечетко прописан в нашей документации. Надо дополнить!