Несколько входов в функции / узел-красный - PullRequest
0 голосов
/ 22 января 2020

ОС - Windows 10 / Node-Red Версия: 1.0.3 / node.js - v12.14.0

Я пытаюсь обработать несколько объектов msg.payload.subobjects для функционального узла. Но при этом я всегда получаю сообщение об ошибке "" TypeError: Невозможно прочитать свойство '0' из неопределенного "".

Узлы предоставляют правильные данные (проверено в узлах отладки). Но передача их в функцию возвращает ошибку.

Возможно ли обработать два таких входа в функцию? Потому что они оба используют объект msg.payload?

Вот подготовленная версия для тестирования:

[ 
   { 
      "id":"894fec71.7d972",
      "type":"function",
      "z":"dd09b1ba.0e51e",
      "name":"Weather Prediction",
      "func":"var wBees = 0;\nvar wActually = msg.payload.newWt;\n\nvar c0 = msg.payload.data[0].CO2;\nvar c1 = msg.payload.data[1].CO2;\nvar c2 = msg.payload.data[2].CO2;\n\n//wActually.localeCompare(\"rain\") === false\nif(wActually === \"rain\"){\n    wActually = \"good\";\n}else{\n    wActually = \"other\";\n}\n\n//c0, c1, c2 --- 2pm, 10pm, 6am\n  var day = c1-c0;\n  var night = c1-c2;\n\n// Checks proportion\n  if(night > day){\n    // bad weather\n\twBees = \"other\";\n  }else{\n    // good weather\n\twBees = \"good\";\n  }\n\n// Evaluation\nif(wBees == wActually){\n    msg.payload.weatherPredict = \"Correct\" + \" || Current: \" + msg.payload.weather;\n\treturn msg;\n}else{\n\tmsg.payload.weatherPredict = \"Incorrect\" + \" || Current: \" + msg.payload.weather;\n\treturn msg;\n}",
      "outputs":1,
      "noerr":0,
      "x":830,
      "y":360,
      "wires":[ 
         [ 
            "3ee84278.8a86de"
         ]
      ]
   }
]

1 Ответ

3 голосов
/ 22 января 2020

Проблема в том, что ваш функциональный узел Weather Prediction получает 2 отдельных сообщения с разными структурами. Когда вы разделяете поток, вы получаете копию сообщения, проходящего по каждой ветви. Они не объединяются автоматически при подключении их обоих к узлу функции.

Вы пытаетесь получить доступ к частям обоих новых сообщений в узле функции. Если вам нужны оба сообщения, чтобы выполнить эту работу, вам нужно вставить узел join перед узлом функции, установить ожидание 2 сообщений и объединение значений msg.payload

...