質問:非同期に少し新しく、たくさんのファイルをダウンロードするための次のコードがあります、2つはほぼ同時に
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")
もちろん、async.eachLimitがfuncsを実行し続けている間、「completed」はすぐに起動されます。
すべての反復が完了するのを待つ良い方法は何ですか?
nvm、ドキュメントを十分に詳しく読んでいませんでした。
さらに別のコールバックパラメータがあり、私が待つことができるという約束でそれをすべてまとめることになりました
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)
ちなみに、 v3
のプレリリースを使用している場合は、ラッパーは必要ありません。 eachLimit
は、最後のコールバックを渡さない場合、promiseを返します。
うーん、async.eachLimitを待ってみましたが、なんらかの理由で機能しませんでした。 それが私がここに投稿するきっかけになった理由です。 私はそれに別のショットを与える必要があります。
成功しましたか? 私は同じことに直面しています-それは単にすべての反復の約束が終了するのを待つわけではありません。