非同期処理の一般的な鍵は、次の反復に進む前に、現在の反復がいつ行われるかを示す必要があることです。 .find()
などの実際の操作以降 ここでは、操作が応答で完了したときに「呼び出される」「コールバック」を採用しています。通常は、コードの同じセクションで反復の終了を示す何かを呼び出すことです。
基本的に、" async.eachSeriesを使用すると、従来のループと同様の結果を得ることができます。 " 「一度に1回の反復」のみを実行するメソッド:
function check (collection) {
var records = [ { body: "Test 1"}, { body: "Test 2" } ];
async.eachSeries(records,function(item,callback) {
collection.find( item, function (err, rows) {
console.log(rows);
callback(err)
});
},function(err) {
if (err) throw err;
console.log("done");
});
}
したがって、各配列引数はここでは「item」パラメーターとして「iterator」関数に渡され、2番目の引数は後で使用される「callback」関数です。イテレータが呼び出されるたびに、その引数が.find()
に渡されます。 独自の「コールバック」があり、「エラー」または「ドキュメント」応答が返されるメソッド。
そのコールバック内で、「イテレータ」関数によって提供される「コールバック」が呼び出され、現在の反復の完了を通知します。これにより、ここでの「each」関数を続行し、実際に次の「反復」を呼び出して、次の配列要素を処理できます。
背景に注意して、JavaScriptで[]
を使用して「配列」を表記する正しい方法に注意してください。 図のようにブラケット。これは通常、アレイを操作する場合の重要な違いです。
"async.each"
には他にもバリエーションがあります および
したがって、ループ操作が「非ブロッキング」である場合、次に進む前に、そのループがいつ完了するかを示す必要があります。