Dalam kod yang diberikan, percubaan dibuat untuk mendapatkan semula data daripada berbilang pertanyaan MongoDB dalam satu gelung dan mengumpulkan hasilnya ke dalam satu tatasusunan data. Walau bagaimanapun, masalah timbul apabila cuba mengembalikan data ini sebagai respons.
Isu ini berpunca daripada sifat tak segerak pertanyaan MongoDB. Apabila pertanyaan dilaksanakan, fungsi itu tidak segera mengembalikan hasil tetapi sebaliknya memulakan tugas dan kembali serta-merta. Inilah sebab mengapa finalData, bertujuan untuk menyimpan hasil agregat, dikembalikan sebagai tidak ditentukan: fungsi keluar sebelum pertanyaan selesai dan mengumpul datanya.
Untuk menyelesaikan isu ini, kita perlu memanfaatkan janji, yang memudahkan pengaturcaraan tak segerak dengan menyediakan cara berstruktur untuk mengendalikan aliran tugas tak segerak. Janji membolehkan kami mentakrifkan fungsi yang akan dilaksanakan apabila tugas tak segerak selesai.
Untuk melaksanakan janji:
Dengan mengambil kira konsep ini, fungsi getPrayerInCat yang diubah suai adalah seperti berikut:
function getPrayerInCat(data) { var promises = data.map(function(data2) { var id = data2.id; return find({ prayerCat: id }) .then(function(prayer) { if (!prayer) data2.prayersCount = 0; else data2.prayersCount = prayer.length; return data2; }); }); return Q.all(promises); }
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Pengambilan Data Asynchronous dalam Gelung dalam MongoDB?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!