Rumah > Artikel > hujung hadapan web > Bagaimana untuk Mengendalikan Data Pemulangan daripada Pertanyaan MongoDB Asynchronous Dalam Gelung?
Menyelesaikan Data Pemulangan daripada Pertanyaan Asynchronous dalam Gelung
Dalam aplikasi pangkalan data, selalunya perlu melakukan berbilang pertanyaan dalam satu gelung dan mengembalikan hasil agregat. Apabila menggunakan operasi pangkalan data tak segerak, adalah penting untuk mengendalikan data yang dikembalikan dengan betul, memastikan kod anda menunggu semua pertanyaan selesai sebelum menghantar respons.
Dalam senario ini, kod kami bertujuan untuk menanyakan MongoDB untuk berbilang doa kategori dan kembalikan tatasusunan data yang mengandungi ID kategori, kiraan doa dan butiran lain. Walau bagaimanapun, hanya kembali ke dalam gelung membawa kepada nilai yang tidak ditentukan kerana kod itu tidak menunggu pertanyaan tak segerak selesai.
Untuk menyelesaikan isu ini, kami boleh menggunakan perpustakaan Q, yang membantu dalam mengurus operasi tak segerak. Malangnya, kaedah pencarian pustaka MongoDB tidak mengembalikan janji, jadi kami menggunakan pembantu antara muka nod Q untuk membuat pembalut segera di sekelilingnya, memastikan ia mengembalikan janji:
var find = Q.nbind(Prayer.find, Prayer);
Mengikut prinsip janji pengendalian, kami mengubah suai forEach panggil balik untuk mengembalikan janji bagi setiap pertanyaan dan kemudian menggunakan Q.all untuk menunggu semua janji diselesaikan:
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); }
Pendekatan ini memastikan kod kami menunggu semua pertanyaan selesai sebelum kembali data agregat, menghalang nilai yang tidak ditentukan. Ingat, apabila bekerja dengan operasi tak segerak, adalah penting untuk mematuhi peraturan pengendalian janji, mencipta pembungkus jika perlu dan menggunakan perpustakaan seperti Q untuk memudahkan proses.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Data Pemulangan daripada Pertanyaan MongoDB Asynchronous Dalam Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!