node.js使用许多受监视的项目

我使用node-opcua module ,我想用订阅监视许多opc ua nodes ,我看到的结果是:用户在HTML UIselect要监视的节点,然后单击监视button,发送这些nodeIds作为参数,然后每个nodeid将是设置订阅和.on(“更改”)适用于这些项目中的每一个并行。 现在代码如下所示:

  var monitoredItem = the_subscription.monitor({ nodeId: opcua.resolveNodeId("ns=6;s=S71500ET200MP station_1.Master.111"), attributeId: 13 }, { samplingInterval: 100, discardOldest: true, queueSize: 10 }, opcua.read_service.TimestampsToReturn.Both ); console.log("-------------------------------------"); var nodes = []; monitoredItem.on("changed",function(dataValue){ //console.log(" value = ",dataValue.value.value); //console.log(" sourceTimestamp = ",dataValue.sourceTimestamp.toISOString()); //console.log(JSON.stringify(dataValue)); var Node = {nodeId: "ns=6;s=S71500ET200MP station_1.Master.111", nodeName: "111" , nodeValue: dataValue.value.value , nodeTimestamp: dataValue.sourceTimestamp.toISOString()}; var arrayNode = Object.keys(Node).map(function(k) { return Node[k] }); //console.log(JSON.stringify(Node)); nodes.push(arrayNode); // console.log(nodes); }); }, 

现在,如果我想设置新项目来监视它只是添加许多variablesMonitorItem1,。2,。3等

如何以更agile/dynamic方式做到这一点? 如果我有nodeIds数组(string),我希望在订阅中监视它们中的每一个。 代码是async.series ([code])的一部分

使用async.each方法解决

 async.each(nodeIdArr, function(nodeid, callback) { var monitoredItem = the_subscription.monitor({ nodeId: opcua.resolveNodeId(nodeid), attributeId: 13 }, { samplingInterval: 100, discardOldest: true, queueSize: 10 }, opcua.read_service.TimestampsToReturn.Both ); console.log("-------------------------------------"); monitoredItem.on("changed",function(dataValue){ //console.log(" value = ",dataValue.value.value); //console.log(" sourceTimestamp = ",dataValue.sourceTimestamp.toISOString()); //console.log(JSON.stringify(dataValue)); var Node = {nodeId: nodeid, nodeName: "111" , nodeValue: dataValue.value.value , nodeTimestamp: dataValue.sourceTimestamp.toISOString()}; var arrayNode = Object.keys(Node).map(function(k) { return Node[k] }); //console.log(JSON.stringify(Node)); nodes.push(arrayNode); // console.log(nodes); });