Rumah >hujung hadapan web >tutorial js >Bagaimanakah anda mengendalikan pengambilan data tak segerak dalam gelung dan memastikan semua pertanyaan selesai sebelum mengembalikan set data yang padu?

Bagaimanakah anda mengendalikan pengambilan data tak segerak dalam gelung dan memastikan semua pertanyaan selesai sebelum mengembalikan set data yang padu?

Susan Sarandon
Susan Sarandonasal
2024-11-10 15:54:03513semak imbas

How do you handle asynchronous data retrieval in loops and ensure all queries complete before returning a cohesive dataset?

Pendapatan Data Tak Segerak dalam Gelung: Mengendalikan Keputusan Pertanyaan Dengan Berkesan

Dalam banyak senario pengaturcaraan, kami menghadapi keperluan untuk melaksanakan berbilang pangkalan data tak segerak pertanyaan dalam gelung untuk mendapatkan semula data. Walau bagaimanapun, adalah sukar untuk mengurus keputusan dan mengembalikannya sebagai set data kohesif tunggal.

Perihalan Masalah

Kod yang disediakan dalam soalan cuba melaksanakan berbilang pertanyaan MongoDB dalam satu gelung, di mana matlamatnya adalah untuk mengumpul data yang diambil semula ke dalam tatasusunan tunggal. Walau bagaimanapun, kod tersebut menghadapi isu di mana hasilnya dikembalikan sebagai 'tidak ditentukan' dan bukannya mengandungi data yang dijangkakan. Ini kerana pernyataan 'kembali' dilaksanakan serta-merta tanpa menunggu semua pertanyaan selesai.

Tinjauan Keseluruhan Penyelesaian

Untuk menangani masalah ini, kita perlu mengamalkan prinsip pengaturcaraan tak segerak. Prinsip ini melibatkan bekerja dengan janji dan mengendalikan operasi tak segerak dengan betul untuk memastikan keputusan dikembalikan hanya apabila semua pertanyaan selesai.

Fungsi Janji dan Async

Janji mewakili hasil akhirnya daripada operasi tak segerak. Ia adalah objek yang mengandungi dua fungsi panggil balik: 'resolve' dan 'reject'. Apabila operasi selesai dengan jayanya, 'resolve' dipanggil dengan hasilnya, manakala 'reject' dipanggil sekiranya berlaku kegagalan.

Dalam senario kami, setiap pertanyaan pangkalan data harus mengembalikan objek janji. Ini membolehkan kami membuat rangkaian panggilan balik yang akan dilaksanakan secara berurutan selepas setiap pertanyaan selesai.

Memfaktorkan Semula Kod

Mari kita memfaktorkan semula kod untuk menggabungkan prinsip ini :

var getPrayerCount = 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;
    });
}

var getPrayerInCat = function(data) {
  var promises = data.map(getPrayerCount);
  return Q.all(promises);
}

Dalam 'getPrayerCount', kami menggunakan 'find' dan bukannya 'Prayer.find' kerana yang pertama mengembalikan janji. Kami kemudian merangkaikan panggilan balik '.then' yang akan memproses hasil setiap pertanyaan.

Dalam 'getPrayerInCat', kami menggunakan 'Q.all' untuk mencipta satu janji yang mewakili pelengkapan semua pertanyaan individu . Ini memastikan bahawa kod akan menunggu semua pertanyaan selesai sebelum mengembalikan hasilnya.

Dengan mengikut prinsip ini, kami boleh mengendalikan pengambilan data tak segerak secara gelung dengan berkesan dan memastikan keputusan dikembalikan sebagai set data padu apabila semua pertanyaan telah selesai.

Atas ialah kandungan terperinci Bagaimanakah anda mengendalikan pengambilan data tak segerak dalam gelung dan memastikan semua pertanyaan selesai sebelum mengembalikan set data yang padu?. 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