首页  >  文章  >  web前端  >  异步forEach任务完成后如何执行回调?

异步forEach任务完成后如何执行回调?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-04 12:53:01309浏览

How to Execute a Callback after Asynchronous forEach Tasks Complete?

异步forEach任务完成后执行回调

问题

如何一次全部异步执行回调函数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();
}

});
});

此方法使用每次异步操作完成时都会递增的计数器。一旦计数器达到数组中的项目总数,就会调用回调函数。

使用 ES6 Promises

  • 同步执行:
    < ;pre>
    const requests = [1, 2, 3].reduce((promiseChain, item) => {
    返回promiseChain.then(() => new Promise((resolve) =>; {
    asyncFunction(item, resolve);
    }));
    }, Promise.resolve());

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn