Frage: Etwas neu für Async und folgenden Code zum Herunterladen vieler Dateien, 2 ungefähr gleichzeitig
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")
Natürlich wird "completed" schnell gefeuert, während async.eachLimit weiterhin Funktionen ausführt.
Was ist ein guter Weg, um zu warten, bis alle Iterationen durchgeführt wurden?
nvm, habe die Dokumentation nicht genau genug gelesen.
Es gibt noch einen weiteren Callback-Parameter, der alles in einem Versprechen verpackt hat, auf das ich warten kann
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)
Randnotiz: Wenn Sie die Vorabversion von v3
, benötigen Sie den Wrapper nicht. eachLimit
gibt eine Zusage zurück, wenn Sie den letzten Rückruf nicht bestehen.
hmm, ich habe versucht, auf async.eachLimit zu warten, aber es hat aus irgendeinem Grund nicht funktioniert. Das hat mich veranlasst, hier zu posten. Ich muss es noch einmal versuchen.
Ist es Ihnen gelungen? Ich stehe vor dem gleichen - es wartet einfach nicht, bis die Versprechen aller Iterationen abgeschlossen sind.