私はforeachループを持っています。ここで私は非同期関数を呼び出します。すべての非同期関数が指定されたコールバック関数と呼ばれ、その後、何かが実行されることを確認するにはどうすればよいですか?非同期呼び出しを実行しているforeachループが終了したことを確認する方法はありますか?
0
A
答えて
2
カウンターをつけてください。 例:他の答えが言うように
const table = [1, 2, 3];
const counter = 0;
const done =() => {
console.log('foreach is done');
}
table.forEach((el) => {
doSomeAsync((err, result) => {
counter++;
if (counter === 3) {
done();
}
});
});
は、あなたが本当に良いです非同期パッケージを使用することができます。しかし、そのためにはPromisesを使用し、Vanila Promise.all()を使用することをお勧めします。例:
const table = [1, 2, 3];
Promise.all(table.map((el) => {
return new Promise((resolve, reject) => {
doSomeAsync((err, result) => {
return err ? reject(err) : resolve(result);
});
});
}))
.then((result) => {
// when all calls are resolved
})
.catch((error) => {
// if one call encounters an error
});
1
この場合、Asyncライブラリを使用できます。それは様々な有用なユーティリティ関数を持っています。
タスクのセットを実行するために使用できるキュー機能があり、必要な操作を実行できるすべてのタスクが実行されたときにコールバックを取得します。また、キューの並行性(並行して同時に実行されるタスクの数)を制御することもできます。ここで
は
// create a queue object with concurrency 2
var q = async.queue(function(task, callback) {
console.log('hello ' + task.name);
callback();
}, 2);
// The callback function which is called after all tasks are processed
q.drain = function() {
console.log('all tasks have been processed');
};
// add some tasks to the queue
q.push({name: 'foo'}, function(err) {
console.log('finished processing foo');
});
q.push({name: 'bar'}, function (err) {
console.log('finished processing bar');
});
関連する問題
- 1. 非同期呼び出しが終了するまで待つ -
- 2. Windows Phoneアプリケーションが終了しているときに非同期呼び出しを行う方法
- 3. 関数を実行する前に非同期要求が完了したことを確認する方法
- 4. 非同期呼び出しが完了する前に角度テストが終了していますか?
- 5. 非同期呼び出しの終了後に応答を返す方法は?
- 6. ループ内で非同期関数を使用し、ループが終了した後でコールバックを呼び出す
- 7. 非同期タスクのメソッドを呼び出すと、アプリケーションは終了します
- 8. エンティティへのコアlinq非同期呼び出しがプログラムを終了します
- 9. Angularでは、終了非同期呼び出しを待ってforeach内の次のオブジェクトに移動する方法はありますか?
- 10. クライアント側から.NET Remoting非同期サービス呼び出しを終了します。
- 11. 非同期Webサービス呼び出しのエラーを確認する方法
- 12. 複数の非同期呼び出しを行い、完了したら何かを実行します
- 13. Node.js - すべての非同期呼び出しが終了した後に戻る方法
- 14. 非同期呼び出しを同期化する方法
- 15. サービスからの非同期呼び出しが完了したときにのみ関数を呼び出す方法はありますか?
- 16. プログラムの実行が終了する前にQSerialPort.closeが完了していることを確認しますか?
- 17. 休憩シャープで非同期メソッドが終了していることを確認してください
- 18. 非同期呼び出しが完了した後になにかを実行します。
- 19. 非同期呼び出し内の非同期呼び出しが実行されない
- 20. Swift:forループの非同期呼び出し
- 21. 非同期サービスの初期化が完了していることを確認しますか?
- 22. 非同期メソッド呼び出し中のメインスレッド終了?
- 23. 非同期ライブラリから非同期呼び出しを行う?
- 24. レンダリングメソッドの後にcomponentWillMountの非同期呼び出しが終了する
- 25. 非同期に非同期デリゲートを呼び出しますか?
- 26. 返す前に非同期操作のループが完了していることを確認する
- 27. パラメータを使用した非同期呼び出しの呼び出し方法
- 28. ループ内で非同期呼び出しを処理する方法は?
- 29. mockitoで非同期呼び出しをスタブする方法は?
- 30. $ http非同期呼び出しをデバッグする方法は?
コード - サンプルはそうですが、悲しいことに、私は、並行性を知りません。 – skiilaa
次に、同時実行性1を使用します。これは、タスクを順番に実行します。 – codeslayer1