【发布时间】:2016-02-24 20:16:14
【问题描述】:
有经验的程序员,没有经验的 javascript 程序员。
我正在使用 Node-RED,并且在我的一个节点中,我正在使用“child_process”调用一个外部程序,该程序通过标准输出将数据发送回我的节点。
我正在使用 console.info(stdout) 来记录子进程数据,所以我知道它工作正常。这是函数节点内的代码:
/* required modules */
var cp = context.global.child_process;
/* variables */
var packet = {};
var cmd = '~/packet/packet.py ';
/* construct the packet object */
packet.networkTime = (msg.payload[3] << 24) + (msg.payload[2] << 16) + (msg.payload[1] << 8) + msg.payload[0];
packet.sampleCount = msg.payload[4];
packet.uncompressedWidth = msg.payload[5];
packet.compressedWidth = msg.payload[6];
packet.sample0 = (msg.payload[8] << 8) + msg.payload[7];
var compressedData = msg.payload.slice(9);
/* change buffer type to array */
packet.compressedData = [];
compressedData.forEach(
function(element){
packet.compressedData.push(element);
}
);
/* stringify the object */
var packet_str = "'" + JSON.stringify(packet) + "'";
/* this section will execute the command */
cp.exec(
cmd + packet_str,
function(error, stdout, stderr){
console.info(stdout);
return JSON.parse(stdout);
}
);
//return data_msg;
我尝试将 data_msg 设置为 {} 并使用 JSON.parse(stdout) 放入该对象,但“返回 data_msg”总是在返回值之前执行。我只是想在返回这个节点之前等待我的外部进程返回数据。
感谢您的帮助,
【问题讨论】:
标签: javascript node.js node-red