Kunci umum untuk pemrosesan asinkron adalah Anda ingin memiliki beberapa indikasi kapan iterasi saat ini selesai sebelum melanjutkan ke iterasi berikutnya. Karena operasi sebenarnya seperti .find()
di sini sendiri menggunakan "panggilan balik" yang "dipanggil" ketika operasi selesai dengan respons, maka yang biasanya ingin Anda lakukan adalah memanggil sesuatu yang menandakan akhir dari iterasi Anda di bagian kode yang sama.
Dalam cara dasar, Anda bisa mendapatkan hasil yang sama seperti yang Anda bisa dalam loop tradisional dengan "async.eachSeries " metode, yang hanya akan membiarkan "satu iterasi pada satu waktu" berlangsung:
function check (collection) {
var records = [ { body: "Test 1"}, { body: "Test 2" } ];
async.eachSeries(records,function(item,callback) {
collection.find( item, function (err, rows) {
console.log(rows);
callback(err)
});
},function(err) {
if (err) throw err;
console.log("done");
});
}
Jadi setiap argumen array diteruskan ke fungsi "iterator" di sini sebagai parameter "item", dan argumen kedua adalah fungsi "callback" yang akan digunakan nanti. Setiap kali iterator dipanggil, argumen itu diteruskan ke .find()
metode yang pada gilirannya memiliki "panggilan balik" sendiri, di mana respons "kesalahan" atau "dokumen" diberikan.
Di dalam panggilan balik itu, "panggilan balik" yang disediakan oleh fungsi "iterator" kemudian dipanggil untuk memberi sinyal penyelesaian iterasi saat ini. Ini memungkinkan fungsi "setiap" di sini untuk melanjutkan dan memang memanggil "iterasi" berikutnya dan memproses elemen larik berikutnya.
Perhatikan latar belakang Anda, perhatikan cara yang benar untuk menandai "array" di JavaScript dengan []
tanda kurung seperti yang ditunjukkan. Ini umumnya merupakan perbedaan penting ketika bekerja dengan array.
Ada variasi lain dari "async.each" dan "async.eachLimit" yang keduanya memungkinkan beberapa tingkat pemrosesan paralel, tetapi metode "Seri" melakukan hal-hal "secara berurutan" dengan cara yang biasa Anda lakukan dengan loop tradisional.
Jadi di mana operasi loop adalah "non-blocking", Anda perlu menandakan ketika loop itu selesai sebelum Anda ingin melanjutkan.