如何知道async for循环何时完成
How to know when async for loop is done?
我有一个for循环,它启动了数百个异步函数。一旦所有的函数都完成了,我需要运行最后一个函数,但我似乎不能把我的头绕在它周围,知道所有的函数何时完成。
我已经尝试了promises,但是只要循环中的任何函数都解决了,那么我的promise函数就完成了。
for(var i = 0; i < someArray.length; i ++){
// these can take up to two seconds and have hundreds in the array
asyncFunction(someArray[i];
}
如何判断每个函数是否已经完成?
一个增量
你可以添加一个递增的回调:
for (var i = 0; i < len; i++) {
asycFunction(someArray[i]);
asycFunction.done = function () {
if (i == someArray.length - 1) {
// Done with all stuff
}
};
}
递归方法
这种类型的方法更受一些开发人员的欢迎,但(可能)需要更长的时间来执行,因为它等待一个完成,再运行另一个。
var limit = someArray.length, i = 0;
function do(i) {
asyncFunction(someArray[i]);
asyncFunction.done = function () [
if (i++ == someArray[i]) {
// All done!
} else { do(i); }
}
}
do(i++);
<标题>
Promises目前还没有得到很好的支持,但是你可以使用库。不过,它肯定会给你的页面增加一点体积。
一个很好的解决方案
(function (f,i) {
do(i++,f)
}(function (f,i) {
asyncFunction(someArray[i]);
asyncFunction.done = function () {
if (i++ === someArray.length - 1) {
// Done
} else { f(i) }
};
}, 0)
标题>许多库都有.all
解析器:
- jQuery q
- 蓝鸟
- 和更多- https://promisesaplus.com/implementations
你可以使用它们或者学习它们的源代码。
假设代码是函数foo()
的主体:
function foo() {
return Promise.all(someArray.map(function(item) {
//other stuff here
return asyncFunction(item, /* other params here */);
}));
}
或者,如果没有其他事情要做,也没有其他参数要传递:
function foo() {
return Promise.all(someArray.map(asyncFunction));
}
可查看回复数
对于每个响应,您可以增加计数器值,如果计数器值与someArray相同。
相关文章:
- 循环jquery $.get,如何知道循环何时完成
- 只有在查看完所有图像后,在图库中循环才开始淡入/淡出图像
- node.js事件循环何时终止
- 如何检查视频何时循环html5
- 在Node.js中,我如何判断何时解析完网页
- for循环为什么以及何时忽略具有html集合的某些项
- 在处理完整个For循环后发出嵌套的HTML5 Web SQL查询
- 如何知道回调循环的哪一次迭代以及何时执行
- 这个for循环如何决定何时中断循环
- 反向while循环如何知道在JavaScript中何时停止
- V8 GC何时触发其第一个小GC循环(清除)
- 浏览器的事件循环何时开始?
- 我如何知道最后一个异步函数何时在ob" for键中返回结果?循环
- 如果没有逻辑操作符,for循环如何知道何时停止?
- 在Javascript中循环数组时检测值何时改变
- 如何播放随机的声音没有重复?播放完所有文件然后再次开始新的声音循环
- 如何知道async for循环何时完成
- 如何/何时在"For"循环被执行?Javascript
- while循环中的If else语句,其中If else语句决定while循环何时停止
- 当循环通过dom元素时;这个“;以及何时使用循环变量