ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript のループ内で複数のデータベース クエリからデータを返すにはどうすればよいですか?

JavaScript のループ内で複数のデータベース クエリからデータを返すにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-14 22:19:02369ブラウズ

How can I return data from multiple database queries within a loop in JavaScript?

ループ内の複数のデータベース クエリから返されるデータに関する問題

ループ内で複数のデータベース クエリを実行する場合、非同期操作を処理することが重要です

提供されたコードでは、getPrayerInCat 関数は forEach コールバックを使用して複数の MongoDB クエリを実行します。ただし、この関数はすべてのデータベース クエリの結果が完了するのを待たないため、コードはすぐに未定義を返します。

この問題を解決するには、Promise を使用するときに次の原則に従う必要があります。

  1. すべての非同期関数は Promise を返す必要があります。
  2. Promise を返さない関数のラッパーを作成して、Promise 互換にします。
  3. 非同期結果とやり取りするものはすべて、Promise を返さなければなりません。 .then コールバックに入ります。

これらの原則を使用して、promise を返す getPrayerCount 関数のバージョンを作成できます。

function getPrayerCount(data2) {
    var id = data2.id;
    return find({prayerCat:id})
    .then(function(prayer) {
        if (!prayer)
            data2.prayersCount = 0;
        else
            data2.prayersCount = prayer.length;
        return data2;
    });
}

複数の非同期タスクを処理して待機するためクエリを完了するには、Q.all:

function getPrayerInCat(data) {
    var promises = data.map(getPrayerCount); // don't use forEach
    return Q.all(promises);
}

getPrayerInCat 関数から Promise を返すことで、結果を返す前にすべてのクエリが完了するのを待つことができます。

以上がJavaScript のループ内で複数のデータベース クエリからデータを返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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