首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >angular -访问多个http调用的数据-如何解析promises

angular -访问多个http调用的数据-如何解析promises
EN

Stack Overflow用户
提问于 2013-01-27 16:05:32
回答 1查看 35K关注 0票数 54

我被一些我认为应该是直截了当的东西卡住了。我需要从三个不同的ajax调用中获取数据,组合并处理这三个调用,并将结果数组显示给用户。

在最简单的形式下,我的代码如下所示:

代码语言:javascript
复制
function giftControler ($scope, $http) {
  var names = $http.get("names.json"),
      naughty = $http.get("naughty.json"),
      nice = $http.get("nice.json");

我知道我的变量被赋值给promises,而不是实际的结果,并且http请求已经被传递到事件队列。如果我在这些语句后面加上可执行语句,这些变量将是未定义的。我不明白如何等待这些承诺得到解决才能继续处理它们。

我想要做的是立即添加代码:

代码语言:javascript
复制
      for (var i=0; i<names.length; i++){
        for (var j=0; j<nice.length; j++){
          if (names[i] === nice[j]){
            names[i] = names[i] + "--Yay!!";
          };
        };
      };                
      $scope.kids = names;

问题是,我不能就像它们是解析的数组一样来处理这些承诺。Javascript将在http调用之后立即看到这些语句,并尝试立即执行它们,即使这些承诺尚未解析。

我遇到的问题是$http api给了我一个promise对象,它有三个函数:errorsuccessthen。我不知道在这种情况下该怎么做。我需要为这三个函数都提供一个成功函数。我需要这三个元素都进行解析,然后处理每个元素中的数据,然后将结果分配给一个角度模型。

我确信我漏掉了一些明显的东西,但是有谁有建议吗?在我的实际工作中,我有几个ajax调用、多个数据源和许多处理(比较值、排序、连接等),以得到一个很好的数据集合,但我不能通过这个问题。

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-27 16:42:00

你可以使用$q的函数'all':

代码语言:javascript
复制
function giftControler ($scope, $http, $q) {
  var names = $http.get("names.json"),
      naughty = $http.get("naughty.json"),
      nice = $http.get("nice.json");
  $q.all([names, naughty,nice]).then(function(arrayOfResults) { 
      ... This callback would be called when all promised would be resolved
    });

这种方式更干净一点。

以下是文档的链接:http://docs.angularjs.org/api/ng.$q

票数 156
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14545573

复制
相关文章

相似问题

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