ホームページ > 記事 > ウェブフロントエンド > ループ内で非同期 MongoDB クエリから返されるデータを処理する方法は?
ループ内の非同期クエリからの戻りデータの解決
データベース アプリケーションでは、多くの場合、ループ内で複数のクエリを実行して、集計結果。非同期データベース操作を使用する場合、返されるデータを正しく処理し、コードがすべてのクエリが完了するまで待機してから応答を送信することが重要になります。
このシナリオでは、コードは MongoDB に複数の祈りをクエリすることを目的としています。カテゴリを取得し、カテゴリ ID、祈りの回数、その他の詳細を含むデータの配列を返します。ただし、コードが非同期クエリの終了を待たなかったため、単純にループ内に戻ると未定義の値が発生しました。
この問題を解決するには、非同期操作の管理に役立つ Q ライブラリを利用できます。残念ながら、MongoDB ライブラリの find メソッドは Promise を返さないため、Q のノード インターフェイス ヘルパーを使用して、それを囲む即時ラッパーを作成し、確実に Promise を返すようにします。
var find = Q.nbind(Prayer.find, Prayer);
Promise の原則に従うこの処理では、各クエリの Promise を返すように forEach コールバックを変更し、Q.all を使用してすべての Promise が返されるのを待ちます。 solve:
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; }); } function getPrayerInCat(data) { var promises = data.map(getPrayerCount); return Q.all(promises); }
このアプローチにより、コードはすべてのクエリが完了するまで待機してから集約データを返すようになり、未定義の値が発生するのを防ぎます。非同期操作を扱うときは、Promise 処理のルールを遵守し、必要に応じてラッパーを作成し、Q などのライブラリを利用してプロセスを簡素化することが重要であることを覚えておいてください。
以上がループ内で非同期 MongoDB クエリから返されるデータを処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。