Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Mengendalikan Data Pemulangan daripada Pertanyaan MongoDB Asynchronous Dalam Gelung?

Bagaimana untuk Mengendalikan Data Pemulangan daripada Pertanyaan MongoDB Asynchronous Dalam Gelung?

DDD
DDDasal
2024-11-09 16:32:02956semak imbas

How to Handle Return Data from Asynchronous MongoDB Queries Within a Loop?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn