現在IBM Bluemix上でクラウドファウンドリアプリケーションとしてNode-REDを使用しています。だから、Google Chromeブラウザで動作しているNode-REDのフローエディタを使用しています。私の流れでは、私は関数ノードを持っていて、これが実行されるたびに、アプリケーションがクラッシュして再起動します。ここでfor loop in functionノードがIBM BluemixのNode-REDアプリケーションでクラッシュする
は、機能ノードのコードです:このセクションせずに、アプリがクラッシュしていないため
var id_array = context.get('id_array')||[];
var id_index = context.get('id_index')||0;
var first_time_execution = context.get('first_time_execution')||true;
var i;
var sensor_id = msg.payload.sensor_data.sensor_id;
if(first_time_execution){
id_array[0] = undefined;
first_time_execution = false;
context.set('first_time_execution', first_time_execution);
}
/*for(i = 0; (id_array[i] === undefined) || (i > 256); i++){
if(sensor_id == id_array[i]){
msg.payload.array_index = i;
context.set('id_array', id_array);
context.set('id_index', id_index);
return msg;
}
}*/
id_array[id_index] = sensor_id;
msg.payload.array_index = id_index;
if(id_index > 256){
id_index = 0;
}else{
id_index++;
}
context.set('id_array', id_array);
context.set('id_index', id_index);
return msg;
Iは、/ * * /の間のループのために問題がありました。
私がしたいのは、ゲートウェイからのセンサーデータを持つmsgオブジェクトを取得することです。このゲートウェイには、IDを持ち、測定データをゲートウェイに送信する複数のセンサーが接続されています。それらのデータを区別して保存するために、私はすべてのセンサーのIDを登録してノードのコンテキストに格納したいと思っています。 forループでは、IDが既に登録されているかどうかを確認しています。
このクラッシュを引き起こす原因が分かっている人は、非常に感謝しています。
P.S.これが重要かどうかはわかりませんが、資格、設定、およびフロー自体はcloudantDBに保存されています。フィールドが定義されていないときに、あなたの条件
(id_array[i] === undefined) || (i > 256)
またはの左側が真になるまで
ループのためのJavaScriptで
コンテキストの代わりにグローバル/フローを見たいと思うかもしれません。それにかかわらず、ログ出力を含めると良いでしょう。 'bx cf logs'を実行してログをテールし、クラッシュを再現し、そこに関連するものがあれば参照してください。あるいは、あなた自身をUIに服従させて、そこにログを見ることができます。 –
amadain
どのようなエラーが表示されますか? –
私の腸は私にループ内のコンテキストを設定することは最適ではないと伝えます。通常、コンテキストから値を参照/コピーし、ローカルの変更を加えてから戻すことができます。 – grantwparks