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
   }
}