2017-10-26 6 views
0

現在、受信したJSONデータを解析してグラフとして表示する関数を作成しています。 これを行うために、forループを使用してJSONデータをこのような配列に格納しています。NodeRed関数の配列の非同期操作を実行する

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]である最初の要素のみを送信します。 私は非同期操作を処理するために、msgを返すのではなくnode.sendを行う必要があることを知っていますが、node.sendをどこで実行すべきかは分かりません 誰かが助けることができれば、ありがとう!あなたはeach

他のオプションへcallback引数として渡す関数を宣言する必要があります与えられた例では

答えて

0

は、それが作成さではなく、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ノードを使用して、必要に応じてすべての結果が完了するまで待つことができます。

+0

OKこれはmsg1のnode.sendに適していますか? 私はhttp-in - >この関数 - >スイッチ - > 10個のグラフを持っています 私はjoinを使うと、スイッチとチャートの間にjoinを入れてmsgsを組み合わせることができますか? – sonic98

+0

これは、答えの2番目の提案が言うことです – hardillb

関連する問題