ループ内の複数のデータベース クエリから返されるデータに関する問題
ループ内で複数のデータベース クエリを実行する場合、非同期操作を処理することが重要です
提供されたコードでは、getPrayerInCat 関数は forEach コールバックを使用して複数の MongoDB クエリを実行します。ただし、この関数はすべてのデータベース クエリの結果が完了するのを待たないため、コードはすぐに未定義を返します。
この問題を解決するには、Promise を使用するときに次の原則に従う必要があります。
これらの原則を使用して、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 サイトの他の関連記事を参照してください。