JavaScript、AngularJS - 发送多个同时的 ajax 调用
JavaScript, AngularJS - sending multiple simultaneous ajax calls
在我的 AngularJS
应用程序中,我有一个参数数组(例如一些 ID),它应该用作 ajax 调用队列的参数。问题是数组可能包含 600 多个项目,如果我只是使用 forEach
循环递归地进行 ajax 调用,浏览器页面最终会在每个请求得到解决之前停止响应,因为每个请求响应更新视图。是否有一种技术可以允许发送 ajax 请求,例如,一次异步发送 5 个请求,并且仅当这些请求完成后,才继续接下来的 5 个请求?
看看$q.all()。这使您可以在多个请求完成时执行回调。因此,您可以递归地执行有限数量的请求,直到处理完所有项目。
是的!
我认为最好的解决方案是更改端点以允许 ID 数组,但我想这不是一个选项。您可以使用 promises 来限制同时请求的数量:
function chunkedAjax(idArray, index, limit) {
if(index >= idArray.length) {
return;
}
var index = index || 0;
var limit = limit || 5;
var chunk = idArray.slice(index, limit);
var promises = [];
angular.forEach(chunk, function(id) {
var deferred = $q.defer();
promises.push(deferred.promise);
makeAjaxCall(id).then(function(response){
deferred.resolve();
});
});
$q.all(promises).then(function() {
chukedAjax(idArray, index + limit, limit);
});
}
这是一个递归函数,请注意。在投入生产之前,我会对其进行大量调试。
您可能还需要将 makeAjaxCall
函数修改为 return promise(如果还没有的话),或者将 promise 对象传递给它,以便在 ajax 调用完成
在我的 AngularJS
应用程序中,我有一个参数数组(例如一些 ID),它应该用作 ajax 调用队列的参数。问题是数组可能包含 600 多个项目,如果我只是使用 forEach
循环递归地进行 ajax 调用,浏览器页面最终会在每个请求得到解决之前停止响应,因为每个请求响应更新视图。是否有一种技术可以允许发送 ajax 请求,例如,一次异步发送 5 个请求,并且仅当这些请求完成后,才继续接下来的 5 个请求?
看看$q.all()。这使您可以在多个请求完成时执行回调。因此,您可以递归地执行有限数量的请求,直到处理完所有项目。
是的!
我认为最好的解决方案是更改端点以允许 ID 数组,但我想这不是一个选项。您可以使用 promises 来限制同时请求的数量:
function chunkedAjax(idArray, index, limit) {
if(index >= idArray.length) {
return;
}
var index = index || 0;
var limit = limit || 5;
var chunk = idArray.slice(index, limit);
var promises = [];
angular.forEach(chunk, function(id) {
var deferred = $q.defer();
promises.push(deferred.promise);
makeAjaxCall(id).then(function(response){
deferred.resolve();
});
});
$q.all(promises).then(function() {
chukedAjax(idArray, index + limit, limit);
});
}
这是一个递归函数,请注意。在投入生产之前,我会对其进行大量调试。
您可能还需要将 makeAjaxCall
函数修改为 return promise(如果还没有的话),或者将 promise 对象传递给它,以便在 ajax 调用完成