问题
如何一次全部异步执行回调函数forEach 循环内的操作已经完成?
答案
Array.forEach 没有为这种情况提供开箱即用的解决方案,但有各种方法来实现所需的功能。
<br>function callback() { console.log('all did'); }<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(); }
});
});
此方法使用每次异步操作完成时都会递增的计数器。一旦计数器达到数组中的项目总数,就会调用回调函数。
requests.then(() => console. log('done'))
在此示例中,我们链式承诺保证每个异步操作在下一个异步操作开始之前完成。
<br>const requests = [1,2,3].map((item) => {<br>return new Promise((resolve) = > {<br> asyncFunction(item, resolve);<br>});<br>})
Promise.all(requests).then(() => console.log ('done'));
在这种情况下,我们使用 Promise.all 方法同时执行所有异步操作,然后在所有异步操作完成时调用回调。
像 async 这样的异步库提供了更优雅地表达所需功能的机制。
以上是异步forEach任务完成后如何执行回调?的详细内容。更多信息请关注PHP中文网其他相关文章!