JavaScript,AngularJS - 同时发送多个ajax调用

时间:2016-09-19 13:55:45

标签: javascript angularjs ajax promise es6-promise

在我的AngularJS应用程序中,我有一组参数(例如一些ID),它们应该用作ajax调用队列的参数。问题是数组可能包含600多个项目,如果我只是使用forEach循环递归地进行ajax调用,浏览器页面最终会在每个请求被解析之前停止响应,因为每个响应都会更新视图。是否有一种技术可以允许发送ajax请求,例如,每次异步发送5个请求,只有当这些请求完成后,继续下一个5?

3 个答案:

答案 0 :(得分:1)

看看$q.all()。这使您可以在多个请求完成后执行回调。因此,您可以递归执行有限数量的请求,直到处理完所有项目。

答案 1 :(得分:1)

我认为最好的解决方案是更改端点以允许一系列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函数以返回一个promise(如果尚未提交),或者将promise对象传递给它,以便在ajax调用完成时解析它

答案 2 :(得分:-1)

是!

看看这个模块:https://github.com/caolan/async