2013-07-01 64 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 –