2013-07-01 73 views
3

我一直在寻找一些方法来知道,当两个或更多的Ajax调用已经使用AngularJS完成,但我只能用找到它的jQuery:

$.when(promise3, promise5).done(
    function(threeSquare, fiveSquare) { 
     console.info(threeSquare, fiveSquare); 
    } 
); 

和:

var promises = [ 
    $.getJSON('square/2'), 
    $.getJSON('square/3'), 
    $.getJSON('square/4'), 
    $.getJSON('square/5') 
]; 

$.when.apply($, promises).done(function() { 
    console.info(arguments); 
}); 

有没有办法做这样的事情使用AngularJS? 感谢您的支持!

回答

9

你会想看看$ q.all();你可以阅读关于它here

这里是一个片段:

所有的(承诺)

将多个承诺变成一个承诺,当 所有输入承诺的决心,得到解决。

参数promises - {Array。} - 一组promise。 Returns {Promise} - 返回一个单独的承诺,将使用一个值数组来解决 ,每个值对应于promises数组中相同索引的承诺 。如果任何承诺是 解决与拒绝,这个承诺的承诺将被解决 与相同的拒绝。

在1.1.x版本的,你应该能够做这样的事情:

$q.all([ 
    $http.get('square/2'), 
    $http.get('square/3'), 
    $http.get('square/4'), 
    $http.get('square/5') 
]).then(function(arrayOfResponses) { 
    $log.info('all set'); 
    $log.debug(arrayOfResponses); 
}); 

更新:

随着1.1.6版本,你应该能够做到如下:

var Square = $resource('square/:id', {id:1}); 
$q.all([ 
    Square.get({id:2}).$promise, 
    Square.get({id:3}).$promise, 
    Square.get({id:4}).$promise, 
    Square.get({id:5}).$promise 
]).then(function(arrayOfResponses) { 
    $log.info('all set'); 
    $log.debug(arrayOfResponses); 
}); 
+0

我有点不清楚是否$ resource.get返回一个承诺,即使在1.1.x版本的角度..阅读代码,它看起来像你可能不得不做“Square.get({squareId:2})。$ q”。或者你可以使用$ http.get。 –

+0

@Karl Zilles,我相信你是正确的,但是当涉及对$ resource所做的更改时,文档似乎有些模糊。它看起来像$ http.get返回一个承诺。我会更新我的例子。谢谢。 –

+1

它看起来好像$资源$然后,但不允许您访问承诺。但是,它确实看起来像1.1.6中的$ promise功能:https://github.com/angular/angular.js/commit/05772e15fbecfdc63d4977e2e8839d8b95d6a92d –