ホームページ > 記事 > ウェブフロントエンド > ForEach ループ内の非同期処理の後にコールバック関数を実行するにはどうすればよいですか?
問題ステートメント:
要素の配列が与えられた場合、どうすればforEach ループ内のすべての非同期処理が完了した後のコールバック関数?
解決策 1: カウンターベースのアプローチ
<code class="javascript">function callback () { console.log('all done'); } var itemsProcessed = 0; [1, 2, 3].forEach((item, index, array) => { asyncFunction(item, () => { itemsProcessed++; if(itemsProcessed === array.length) { callback(); } }); });</code>
解決策 2: Promise ベースのアプローチ
同期実行:
<code class="javascript">let requests = [1, 2, 3].reduce((promiseChain, item) => { return promiseChain.then(() => new Promise((resolve) => { asyncFunction(item, resolve); })); }, Promise.resolve()); requests.then(() => console.log('done'));</code>
非同期実行:
<code class="javascript">let requests = [1, 2, 3].map((item) => { return new Promise((resolve) => { asyncFunction(item, resolve); }); }); Promise.all(requests).then(() => console.log('done'));</code>
解決策 3: 非同期ライブラリの使用法
以上がForEach ループ内の非同期処理の後にコールバック関数を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。