首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Angular JS中等待所有$http请求完成

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

Stack Overflow用户
提问于 2014-05-29 19:04:19
回答 1查看 21.8K关注 0票数 23

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

以下是我到目前为止所拥有的部分代码。

代码语言:javascript
复制
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;
    }
  });
}

这是我怀疑的部分,因为有些东西需要作为$q.all()的论据,但在Angular的文档中没有提到,我不确定它是什么意思。

代码语言:javascript
复制
$q.all().then(function () {
  $scope.rData = rData;
});

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-29 19:13:48

$http调用总是返回一个可与$q.all函数一起使用的promise。

代码语言:javascript
复制
var one = $http.get(...);
var two = $http.get(...);

$q.all([one, two]).then(...);

可以在documentation中找到有关此行为的更多详细信息

all(promises)

promises -承诺的数组或散列。

在本例中,您需要创建一个数组,并在循环中将所有调用推入其中。这样,您就可以按照与上面示例相同的方式在数组上使用$q.all(…)

代码语言:javascript
复制
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.
});
票数 56
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23931846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档