具有异步功能的定时循环

时间:2016-01-06 09:48:04

标签: 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;

如果是这样,我如何转换上面的代码,以便time保存循环(以及函数内部)运行的总时间值?

3 个答案:

答案 0 :(得分:3)

你可以用这样的东西做到这一点;

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(); 
}

答案 1 :(得分:2)

您可以使用async.parallel

之类的内容
var start = new Date().getTime();
async.parallel(arrayOfAsyncFunctions, function() {
    var end = new Date().getTime();
    var time = (end - start) / 1000;
});

完成所有异步功能后,将调用回调。

此外,您可以使用任何其他promise表,例如q.all或编写您自己的代码来模拟此行为。

答案 2 :(得分:1)

如果异步操作可以接受回调参数,则可以将计算放在回调中:

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