Async: 先に進む前に、async.eachLimitのすべての反復が終了するのを待つのに適したパターンは何ですか?

作成日 2019年04月17日  ·  4コメント  ·  ソース: caolan/async

質問:非同期に少し新しく、たくさんのファイルをダウンロードするための次のコードがあります、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」はすぐに起動されます。

すべての反復が完了するのを待つ良い方法は何ですか?

question

全てのコメント4件

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を待ってみましたが、なんらかの理由で機能しませんでした。 それが私がここに投稿するきっかけになった理由です。 私はそれに別のショットを与える必要があります。

成功しましたか? 私は同じことに直面しています-それは単にすべての反復の約束が終了するのを待つわけではありません。

このページは役に立ちましたか?
0 / 5 - 0 評価