问题陈述:
给定一个元素数组,我们如何调用forEach 循环中的所有异步处理完成后的回调函数?
解决方案 1:基于计数器的方法
<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 的方法
同步执行:
<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>
异步执行:
<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:异步库使用
以上是如何在ForEach循环内异步处理后执行回调函数?的详细内容。更多信息请关注PHP中文网其他相关文章!