ホームページ >ウェブフロントエンド >jsチュートリアル >MongoDB と Q Promises を使用したループで結果を返す前にデータベース クエリが確実に終了するようにするにはどうすればよいですか?

MongoDB と Q Promises を使用したループで結果を返す前にデータベース クエリが確実に終了するようにするにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-10 17:34:03991ブラウズ

How to Ensure Database Queries Finish Before Returning Results in a Loop with MongoDB and Q Promises?

ループ内で行われたデータベース クエリから取得した結果を返す際の問題

このクエリの目標は、複数の MongoDB クエリを 1 つのループ内で作成することです。をループし、結合された結果を単一のデータ配列として送信します。ただし、ループ内で return を使用すると、データベース要求が完了するまで待機しないため、未定義の応答が返されます。 Q.moulde を使用しても問題は解決しません。

変更コード:

var getPrayerInCat = function(data){
    var promises = data.map(function(data2){
        var id = data2.id;
        return Q.nbind(Prayer.find, Prayer)({prayerCat:id})
            .then(function(prayer) {
                if(!prayer) data2.prayersCount = 0;
                else data2.prayersCount = prayer.length;
                return data2;
            })
    });
    return Q.all(promises);
}

説明:

  1. Q.nbind: この関数は、Prayer.find メソッドを Q プロミスを返す関数に変換します。
  2. Chain Promises:ループは、更新されたデータ オブジェクトで解決される Promise を返すようになりました。
  3. Q.all: この関数は、すべての Promise を 1 つの Promise に結合し、すべての更新されたデータ オブジェクトを含む配列で解決されます。すべてのデータベース クエリが完了すると、
  4. return Q.all(promises);: この行により、関数はすべてのデータベース クエリが完了するまで待機し、結合された結果を返します。

以上がMongoDB と Q Promises を使用したループで結果を返す前にデータベース クエリが確実に終了するようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。