Katakanlah kita menggunakan async.map atau hampir semua utilitas async
Pertanyaan/permintaan fitur saya adalah - jika larik/set tugas kosong, apakah async menjalankan panggilan balik terakhir pada centang berikutnya? Jika tidak, apakah ada cara untuk memberi tahu async untuk melakukan itu? Akan menjadi fitur yang bagus.
Kalau tidak, saya memiliki banyak ini dalam kode saya, yang lebih bertele-tele:
async.map([], function(item,cb){
}, function final(err, results){
process.next(function(){
cb(err,results);
});
});
untuk menghindari Zalgo, ini di atas diperlukan, tetapi, jauh lebih baik untuk dilakukan:
async.map([], function(item,cb){
}, cb);
Saya kira satu hal yang bisa kita lakukan adalah memeriksa apakah array kosong, dan jika demikian, kembalilah lebih awal dengan
if(![].length){
return process.next(cb);
}
apa yang kalian rekomendasikan?
Hai @ORESoftware , terima kasih atas pertanyaannya! Untuk array/set kosong, async
memanggil panggilan balik terakhir pada centang yang sama dengan penangguhan bawaan dihapus di v2.0.0
karena alasan kinerja (saya tidak berpikir async < v2.0.0
bahkan memiliki penangguhan bawaan untuk kasus ini).
Solusi sederhana adalah membungkus async.map
dalam async.ensureAsync
:
async.ensureAsync(async.map)([], function(item, cb) {
}, cb);
atau di suatu tempat di awal kode Anda:
const asyncMap = async.ensureAsync(async.map);
// then call `asyncMap` just as you would `async.map`
Jika tidak, pendekatan process.nextTick
Anda usulkan benar-benar valid. Meskipun, jika Anda menulis kode yang mungkin digunakan di browser, Anda harus melihat async.setImmediate
atau async.nextTick
.
Ya, @hargasinski punya uang. Kami tidak melindungi Anda dari Zalgo karena alasan kinerja.
Salah satu penyederhanaan yang bisa Anda lakukan adalah:
function final(err, results){
process.nextTick(cb, err, results);
}
async.nextTick
/ async.setImmediate
/ process.nextTick
/ setImmediate
semua memungkinkan Anda meneruskan argumen yang akan diteruskan ke fungsi.
Oh bagus, saya tidak tahu itu tentang process.nextTick, dll, itu luar biasa
Komentar yang paling membantu
Ya, @hargasinski punya uang. Kami tidak melindungi Anda dari Zalgo karena alasan kinerja.
Salah satu penyederhanaan yang bisa Anda lakukan adalah:
async.nextTick
/async.setImmediate
/process.nextTick
/setImmediate
semua memungkinkan Anda meneruskan argumen yang akan diteruskan ke fungsi.