Javascript 具有异步功能的定时环路
在循环中使用异步函数是否可以获得循环的执行时间 以下内容适用于同步功能,但不适用于异步功能:Javascript 具有异步功能的定时环路,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,在循环中使用异步函数是否可以获得循环的执行时间 以下内容适用于同步功能,但不适用于异步功能: var amount = 100; var start = new Date().getTime(); for(var i=0; i < amount; i++){ // function } var end = new Date().getTime(); var time = (end - start) / 1000; var金额=100; var start=new Date().
var amount = 100;
var start = new Date().getTime();
for(var i=0; i < amount; i++){
// function
}
var end = new Date().getTime();
var time = (end - start) / 1000;
var金额=100;
var start=new Date().getTime();
对于(变量i=0;i
如果是这样,我如何转换上述代码,使
time
保存循环(以及其中的函数)运行所需的总时间值?您可以使用以下方法:
完成所有异步函数后,将调用回调
此外,您还可以使用任何其他promise库,例如,或编写自己的代码来模拟此行为。您可以使用类似的方法来实现这一点
var amount = 100;
var completionAmount = 0;
var start = new Date().getTime();
var end, time;
var theFunction = function(){
// bla bla
}
var calbackOfTheFunction = function(){
//bla bla
completionAmount++;
if(completionAmount === 100){
end = new Date().getTime();
time = (end - start) / 1000;
}
};
for(var i=0; i < amount; i++){
theFunction();
}
var金额=100;
var completionAmount=0;
var start=new Date().getTime();
var结束,时间;
var theFunction=function(){
//布拉布拉
}
var calbackoffunction=函数(){
//布拉布拉
完成量++;
如果(完成金额===100){
end=新日期().getTime();
时间=(结束-开始)/1000;
}
};
对于(变量i=0;i
如果异步操作可以接受回调参数,则可以将计算放入回调中:
var time;
for(var i=0; i < amount; i++){
asyncfunction(someParam, anotherParam, function () {
var end = new Date().getTime();
time = (end - start) / 1000;
// do stuff with time
}
}
var时间;
对于(变量i=0;i
听起来这个循环很不相关,你真的想分析你的异步函数…!?不,我想得到运行异步函数X次所需的时间。其中X是一个相当大的数字(1000次)。您是否需要等待函数完成,然后再在测试中再次启动它,或者只是等待所有调用完成-即异步函数是串行启动还是并行启动?并行,我不需要等待一个函数完成,然后再启动下一个函数。我已经了解了这一点,但问题是我需要大量运行异步函数有多少次,因此是for循环。有没有办法绕过这个问题?当然,在这种情况下,看看@yılmaz回答的问题是,它会为函数的每个调用触发,所以它会对每个调用单独计时,而不是全部计时,不是吗?只要start
不改变,end-start
就会我已经告诉你了整个时间段。谢谢,这很有效。我能不能在if(…)
语句中使用amount-1
而不是completionAmount
?例如if(I==(amount-1)){..}
?在本例中,calbackoffunction
没有i
。如果将calbackoffunction
传递给for循环内部的函数
,当然也可以传递i
。即使有i
,使用i
也可能产生错误的结果,因为i=98
可能是最后一个卡尔贝克开火了。
var time;
for(var i=0; i < amount; i++){
asyncfunction(someParam, anotherParam, function () {
var end = new Date().getTime();
time = (end - start) / 1000;
// do stuff with time
}
}