ホームページ >ウェブフロントエンド >jsチュートリアル >ForEach ループ内の非同期処理の後にコールバック関数を実行するにはどうすればよいですか?

ForEach ループ内の非同期処理の後にコールバック関数を実行するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-04 15:10:02274ブラウズ

How to Execute a Callback Function After Asynchronous Processing within a ForEach Loop?

非同期反復処理後のコールバックの完了

問題ステートメント:

要素の配列が与えられた場合、どうすればforEach ループ内のすべての非同期処理が完了した後のコールバック関数?

解決策 1: カウンターベースのアプローチ

  • 各非同期コールバック内でカウンターをインクリメントします。
  • カウンタが要素の合計数に達したときに「done」コールバックを実行します。
<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 ベースのアプローチ

同期実行:

  • reduce() と Promise.resolve() を使用して 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>

非同期実行:

  • map() を使用して Promise の配列を作成します。
  • すべての Promise が完了したら、Promise.all() を使用して「done」コールバックを呼び出します。解決しました。
<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: 非同期ライブラリの使用法

  • async などのライブラリを活用して、非同期プログラミング パターンを簡素化します。
  • ライブラリによって提供されるコールバック完了メカニズムについては、特定のドキュメントを参照してください。

以上がForEach ループ内の非同期処理の後にコールバック関数を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。