pertanyaan: sedikit baru untuk async dan memiliki kode berikut untuk mengunduh banyak file, 2 pada waktu yang hampir bersamaan
async.eachLimit(files, 2, async (file, callback) => {
reportStep("downloading");
console.log("async start: " + file.path);
await addFile(file.path, file.size);
console.log("async end: " + file.path);
callback();
})
reportStep("completed")
Tentu saja, "selesai" dengan cepat diaktifkan saat async.eachLimit terus menjalankan fungsi.
Apa cara yang baik untuk menunggu semua iterasi selesai?
nvm, tidak membaca dokumen dengan cukup dekat.
ada lagi param panggilan balik, akhirnya membungkus semuanya dengan janji yang bisa saya tunggu
function download(files) {
return new Promise((resolve, reject) => {
async.eachLimit(files, 2, async (file, callback) => {
reportStep("downloading");
console.log("async start: " + file.path);
await addFile(file.path, file.size);
console.log("async end: " + file.path);
callback();
}, (error) => {
if (error){
reject(error);
} else {
resolve();
}
})
});
}
await download(files)
Catatan tambahan, jika Anda menggunakan prarilis v3
, Anda tidak memerlukan pembungkusnya. eachLimit
akan mengembalikan janji jika Anda tidak melewati panggilan balik terakhir.
hmm, saya mencoba menunggu async.eachLimit tetapi tidak berhasil karena beberapa alasan. Itulah yang mendorong saya untuk posting di sini. Aku harus mencobanya lagi.
Apakah Anda berhasil? Saya menghadapi hal yang sama - itu tidak menunggu janji semua iterasi selesai.