Async: Fitur/dukungan - Tugas kosong -> panggilan balik terakhir secara otomatis diaktifkan pada centang berikutnya?

Dibuat pada 13 Apr 2017  ·  3Komentar  ·  Sumber: caolan/async

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?

question

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:

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.

Semua 3 komentar

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat