角 - 如何解决的承诺 - 访问的多个HTTP调用数据(angular — accessing da

2019-07-18 19:16发布

我被卡住的东西,我认为应该是直线前进。 我需要从三个不同的Ajax调用取数据,结合并处理所有的三个,并显示所得到的数组给用户。

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

function giftControler ($scope, $http) {
  var names = $http.get("names.json"),
      naughty = $http.get("naughty.json"),
      nice = $http.get("nice.json");

据我所知,我的变量被分配到的承诺,而不是实际的结果,HTTP请求已经被传递给事件队列。 如果我按照这些具有可执行语句这些变量将是不确定的。 我不知道如何等待这些承诺,以便继续处理他们解决。

我希望做的是立即添加的代码:

      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是给我一个承诺对象有三个功能: errorsuccessthen 。 我不知道该怎么在这种情况下,与该做的。 我需要所有三个单成功的功能。 我需要所有三个解决,然后在每个处理数据,然后将结果分配给一个角模型。

我相信我缺少明显的东西,但没有人有一个建议? 在我的实际工作中,我有几个AJAX调用多个数据源,并进行大量的处理(比较值,分拣,拼接等)拿出一个良好的数据收集的,但我不能获得通过这个问题。

谢谢,

Answer 1:

你可以使用$ Q的功能“全部”:

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
    });

这种方式是有点清洁。

这里是链接docementation: http://docs.angularjs.org/api/ng.$q



文章来源: angular — accessing data of multiple http calls - how to resolve the promises