問題
すべてを非同期にしてからコールバック関数を実行するにはどうすればよいですか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> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">itemsProcessed++; if(itemsProcessed === array.length) { callback(); }
});
});
このアプローチでは、非同期操作が完了するたびにインクリメントされるカウンターを使用します。カウンタが配列内の項目の合計数に達すると、コールバック関数が呼び出されます。
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 サイトの他の関連記事を参照してください。