sql >> データベース >  >> NoSQL >> MongoDB

配列をループし、ループ内のMongoDBコレクションをチェックします(非同期)

    非同期処理の一般的な鍵は、次の反復に進む前に、現在の反復がいつ行われるかを示す必要があることです。 .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" には他にもバリエーションがあります および "async.eachLimit" どちらもある程度の並列処理を可能にしますが、「Series」メソッドは、従来のループで慣れている方法で「順番に」処理を実行します。

    したがって、ループ操作が「非ブロッキング」である場合、次に進む前に、そのループがいつ完了するかを示す必要があります。




    1. マングース:最新のドキュメントを探す

    2. レプリカセットとしてソロMongoDBインスタンスを開始することが本番環境で推奨されないのはなぜですか?

    3. マングースはネストされた配列にデータを入力します

    4. チャネルレイヤーまたはその他の無料ホスティングのないチャネル