等待所有$ http请求在Angular JS中完成

ntz*_*tzm 21 javascript angularjs

我有一个页面,可以$http根据变量的长度发出不同数量的请求,然后我只想在所有请求完成后才将数据发送到作用域.对于这个项目,我不想使用jQuery,所以请不要在你的答案中包含jQuery.目前,当每个请求完成时,数据被发送到范围,这不是我想要发生的.

这是我到目前为止的代码的一部分.

for (var a = 0; a < subs.length; a++) {
  $http.get(url).success(function (data) {
    for (var i = 0; i < data.children.length; i++) {
      rData[data.children.name] = data.children.age;
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

这是我对此持怀疑态度的一部分,因为某些东西需要作为参数$q.all(),但在Angular的文档中没有提及,我不确定它的含义是什么.

$q.all().then(function () {
  $scope.rData = rData;
});
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Mic*_*zyn 55

$httpcall总是返回一个可以与$q.all函数一起使用的promise .

var one = $http.get(...);
var two = $http.get(...);

$q.all([one, two]).then(...);
Run Code Online (Sandbox Code Playgroud)

您可以在文档中找到有关此行为的更多详细信息:

所有(许诺)

promises - 承诺的数组或散列.

在您的情况下,您需要创建一个数组并将所有调用推入循环中.这样,您可以使用与$q.all(…)上例中相同的方式在数组上使用:

var arr = [];

for (var a = 0; a < subs.length; ++a) {
    arr.push($http.get(url));
}

$q.all(arr).then(function (ret) {
    // ret[0] contains the response of the first call
    // ret[1] contains the second response
    // etc.
});
Run Code Online (Sandbox Code Playgroud)