Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Mengendalikan Pengambilan Data Asynchronous dalam Gelung dalam MongoDB?

Bagaimana untuk Mengendalikan Pengambilan Data Asynchronous dalam Gelung dalam MongoDB?

Patricia Arquette
Patricia Arquetteasal
2024-11-09 16:59:02867semak imbas

How to Handle Asynchronous Data Retrieval within a Loop in MongoDB?

Isu Ditemui: Pendapatan Data Tak Segerak Dalam Gelung

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.

Akar Isu

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.

Penyelesaian: Menerima Janji

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.

Melaksanakan Janji

Untuk melaksanakan janji:

  1. Kenalpasti Fungsi Asynchronous : Tentukan fungsi dalam kod yang tidak segerak, kerana ia perlu dibalut dengan janji. Dalam kes ini, panggilan balik forEach dan Prayer.find adalah tak segerak.
  2. Balut Fungsi Asynchronous: Untuk fungsi yang tidak mengembalikan janji secara asal, buat pembungkus yang berfungsi. Dalam kes ini, kami menggunakan Q.nbind untuk membalut Doa.cari dalam fungsi janji-kembali.
  3. Fungsi Panggilan Balik Rantaian: Gunakan .kemudian untuk merantai fungsi panggil balik yang akan dilaksanakan apabila janji diselesaikan. Dalam fungsi panggil balik, lakukan sebarang operasi yang diperlukan dan kembalikan hasilnya.

Penyelesaian Akhir

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!

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