在 NodeRed 函数中对数组执行异步操作

Performing async operation for arrays in a NodeRed function

我目前正在编写一个函数来解析一些传入的 JSON 数据并将它们显示为图表。 为此,我使用了一个 for 循环并在这样的数组中填充 JSON 数据。

var allMsg = [];

async.each (jsonData.dataSet,
  function (sensorItem, callback) {
    for each item in array .... {
      var msg1 = {};
      msg1.req = msg.req;
      msg1.res = msg.res;
      msg1.payload = "some payload";
      allMsg.push(msg1);
    }
    callback();
  },
  function(err) {
    node.send([allMsg];
  }
};
return;
}

以上例子只发送第一个元素allMsg[0]。 我知道要处理异步操作,您需要执行 node.send 而不是 return msg,但我不太确定我应该在哪里执行 node.send 如果有人能提供帮助,那就太好了...谢谢!

在给定的示例中,您需要声明一个函数作为 callback 参数传递给 each

另一种选择是只发布每条消息,而不是将它们推送到 allMsg 数组。例如

async.each (jsonData.dataSet,
  function (sensorItem, callback) {
    for each item in array .... {
      var msg1 = {};
      msg1.req = msg.req;
      msg1.res = msg.res;
      msg1.payload = "some payload";
      node.send(msg1);
    }
  },
  function(err) {
    //node.send([allMsg];
  }
};

但看起来您正在一对 http-inhttp-response 节点之间使用此功能节点 (msg.res/msg.req)。这将不起作用,因为 http-response 只会回复它收到的第一条消息,您不能通过这种方式流式传输多条消息。如果需要,您可以使用 join 节点等待所有结果完成。