Bagaimanakah saya boleh memulangkan data daripada berbilang pertanyaan pangkalan data dalam satu gelung dalam JavaScript?

DDD
Lepaskan: 2024-11-14 22:19:02
asal
277 orang telah melayarinya

How can I return data from multiple database queries within a loop in JavaScript?

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 pelanggan anda.

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:

  1. Setiap fungsi tak segerak mesti mengembalikan janji.
  2. Buat pembungkus untuk fungsi yang tidak mengembalikan janji agar serasi janji.
  3. Semua yang berinteraksi dengan hasil tak segerak harus pergi ke .then panggil balik.

Menggunakan prinsip ini, kita boleh mencipta versi fungsi getPrayerCount yang mengembalikan 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;
    });
}
Salin selepas log masuk

Untuk mengendalikan berbilang tugas tak segerak dan tunggu untuk penyelesaiannya, kita boleh menggunakan Q.all:

function getPrayerInCat(data) {
    var promises = data.map(getPrayerCount); // don't use forEach
    return Q.all(promises);
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan