在 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-in
和 http-response
节点之间使用此功能节点 (msg.res/msg.req)。这将不起作用,因为 http-response
只会回复它收到的第一条消息,您不能通过这种方式流式传输多条消息。如果需要,您可以使用 join
节点等待所有结果完成。
我目前正在编写一个函数来解析一些传入的 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-in
和 http-response
节点之间使用此功能节点 (msg.res/msg.req)。这将不起作用,因为 http-response
只会回复它收到的第一条消息,您不能通过这种方式流式传输多条消息。如果需要,您可以使用 join
节点等待所有结果完成。