是否有可能在循环内获得具有异步函数的循环的执行时间?
以下内容适用于同步函数,但不适用于异步:
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
保存循环(以及函数内部)运行的总时间值?
答案 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
}
}