Isu dengan Mengembalikan Data daripada Berbilang Pertanyaan Pangkalan Data dalam Gelung
Apabila melaksanakan berbilang pertanyaan pangkalan data dalam satu gelung, adalah penting untuk mengendalikan operasi tak segerak dengan betul untuk memastikan semua data diambil sebelum mengembalikannya kepada anda pelanggan.
Dalam kod yang disediakan, fungsi getPrayerInCat melaksanakan berbilang pertanyaan MongoDB menggunakan panggilan balik forEach. Walau bagaimanapun, kod serta-merta kembali tidak ditentukan kerana fungsi itu tidak menunggu keputusan semua pertanyaan pangkalan data selesai.
Untuk menyelesaikan isu ini, kita mesti mematuhi prinsip berikut apabila bekerja dengan janji:
Menggunakan prinsip ini, kita boleh mencipta versi fungsi getPrayerCount yang kembali janji:
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; }); }
Untuk mengendalikan berbilang tugas tak segerak dan menunggu tugasan itu selesai, kita boleh menggunakan Q.all:
function getPrayerInCat(data) { var promises = data.map(getPrayerCount); // don't use forEach return Q.all(promises); }
Dengan mengembalikan janji daripada fungsi getPrayerInCat, kita boleh menunggu semua pertanyaan selesai sebelum mengembalikan keputusan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh memulangkan data daripada berbilang pertanyaan pangkalan data dalam satu gelung dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!