angular度访问多个http调用的数据 – 如何解决承诺

我陷入了一些我认为应该是直截了当的事情。 我需要从三个不同的ajax调用数据,结合和处理所有三个,并显示结果数组给用户。

以最简单的forms,我的代码如下所示:

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

我知道我的variables被分配给承诺,而不是实际的结果,并且http请求已被传递给事件队列。 如果我遵循这些可执行语句,这些variables将是未定义的。 我不明白如何等待这些承诺解决,以继续处理它们。

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

  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调用之后立即看到这些语句,并立即尝试执行它们,即使这些promise还没有解决。

我陷入困境的是$ http api给了我一个三个函数的承诺对象: errorsuccessthen 。 在这种情况下,我不知道该怎么做。 我需要一个成功的三个函数。 我需要全部三个解决scheme,然后处理每个数据,然后将结果分配给一个angular度模型。

我相信我错过了一些明显的东西,但是有没有人有一个build议? 在我的真实工作中,我有几个Ajax调用多个数据源和大量的处理(比较值,sorting,连接等)来拿出一个好的数据收集,但我不能通过这个问题。

谢谢,

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

 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