是的,使用这里找到的异步库:https ://github.com/caolan/async
首先,使用循环来创建你的任务:
var tasks = []; //array to hold the tasks
for(i=0;i<m;i++) {
for(j=0;j<n;j++) {
//we add a function to the array of "tasks"
//Async will pass that function a standard callback(error, data)
tasks.push(function(cb){
//because of the way closures work, you may not be able to rely on i and j here
//if i/j don't work here, create another closure and store them as params
$http call that uses i and j as GET parameters
.success(function(data){cb(null, data);})
.error(function(err){cb(err);});
});
}
}
既然您已经拥有了一个充满了可以执行的回调就绪函数的数组,那么您必须使用 async 来执行它们,async 具有“限制”同时请求数量并因此“限制”批处理的强大功能。
async.parallelLimit(tasks, 10, function(error, results){
//results is an array with each tasks results.
//Don't forget to use $scope.$apply or $timeout to trigger a digest
});
在上面的示例中,您将一次并行运行 10 个任务。
Async 还有很多其他令人惊叹的选项,您可以串联、并行、映射数组等运行。值得注意的是,您可以通过使用单个函数和 async 的“eachLimit”函数来实现更高的效率.