ホームページ >ウェブフロントエンド >jsチュートリアル >非同期の forEach タスクが完了した後にコールバックを実行するにはどうすればよいですか?

非同期の forEach タスクが完了した後にコールバックを実行するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-04 12:53:01376ブラウズ

How to Execute a Callback after Asynchronous forEach Tasks Complete?

非同期の forEach タスクが完了した後にコールバックを実行する

問題

すべてを非同期にしてからコールバック関数を実行するにはどうすればよいですかforEach ループ内の操作は完了しましたか?

回答

Array.forEach は、こ​​のシナリオに対するすぐに使用できるソリューションを提供しませんが、

カウンターの使用

<br>function callback() { console.log('allned'); }</p>
<p>var itemsProcessed = 0;</p>
<p>[1, 2, 3].forEach(item => {<br> asyncFunction(item, () => {</p>
<pre class="brush:php;toolbar:false">itemsProcessed++;
if(itemsProcessed === array.length) {
  callback();
}

});
});

このアプローチでは、非同期操作が完了するたびにインクリメントされるカウンターを使用します。カウンタが配列内の項目の合計数に達すると、コールバック関数が呼び出されます。

ES6 Promises の使用

  • 同期実行:
    < ;pre>
    constrequest = [1, 2, 3].reduce((promiseChain, item) => {
    return PromiseChain.then(() => new Promise((resolve) => {
    asyncFunction(item,solve);
    }));
    }, Promise.resolve());

requests.then(() => コンソール。 log('done'))

この例では、各非同期操作が次の非同期操作が開始される前に完了することを保証する約束を連鎖させます。

  • 非同期実行:
    <br>constmessages = [1,2,3].map((item) => {<br>return new Promise((resolve) = > {<br> asyncFunction(item,solve);<br>});<br>})</li></ul>
    <p>Promise.all(requests).then(() => console.log ('done'));<br>

    この場合、Promise.all メソッドを使用してすべての非同期操作を同時に実行し、すべての操作が完了したときにコールバックを呼び出します。

    非同期ライブラリの使用

    async のような非同期ライブラリは、必要な機能をよりエレガントに表現するメカニズムを提供します。

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

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