Мой поток имеет следующую структуру:
StartNode (InjectNode) -> LongRunningFunction (Custom) -> LogNode (для записи в файл установлено значение Append)
StartNode: просто узел Inject, который я использую для запуска потока
LongRunningFunction: функция создает внутри более длинного цикла for сигнал через
node.send (МСГ)
for(let i = 0; i < 5000000; i++){
node.send({payload: i});
}
это полный код LongRunningNode. Позже я хочу вычислить некоторую строку сообщения на основе счетчика внутри цикла, но проблема может быть воспроизведена с помощью приведенного выше кода
Файл остается пустым, и сценарий прекращает выполнение через некоторое время. Если я подключаю отладочный узел в качестве второго выхода к функции LongRunningFunction, последний вывод консоли находится в районе 3236831, так как куча памяти заполнена
Есть ли общая проблема со структурой моей программы?
Я даже попытался злоупотребить контекстом, поставив
flow.set("pause", true);
while(flow.get("pause")){
}
в цикл for для ввода кода здесь LongRunningFunction и установки «pause» в значение false снова, когда запускается узел наблюдения за файлами.
теоретически, таким образом, он должен отправлять только 1 сигнал за раз и ждать окончания регистрации.
tldr: он никогда ничего не записывает в файл и происходит сбой кучи
Редактировать: Это может быть связано с проблемой:
https://nodejs.org/es/docs/guides/backpressuring-in-streams/
текст для node.js, поэтому не уверен, как это относится к node-red или как его исправить