我正在通過angular.forEach循環數組並調用非角度ajax庫(Trello client.js)。客戶端確實有'成功'和'錯誤'回調,但不返回角延遲。我想在所有ajax調用完成後執行一個函數。AngularJS等待foreach內部的所有異步調用
我有以下代碼:
$scope.addCards = function(listId)
{
var cardTitles = $scope.quickEntryCards[listId].split('\n');
angular.forEach(cardTitles, function(cardTitle,key)
{
Trello.post('/cards', {
name:cardTitle,
idList:listId
},function(){ }, function(){ });
});
//TODO: wait for above to complete...
$scope.init($routeParams.boardId);
$scope.quickEntryCards[listId] = '';
};
我可以在那// TODO並在回調函數,使最後兩行只有在所有帖子後運行成功或失敗怎麼辦?
我認爲這讓我朝着正確的方向發展,但Trello.post並沒有兌現承諾。所以我需要鉤入他們使用的回調和角度承諾... – Daniel
有趣的是,我看到我錯過了你的問題。奇怪,因爲它看起來會返回一個承諾。您可以使用$ q.defer()來做出任何承諾。我將添加僞代碼爲例。 –
是的,這是做到了。 Trello的API是異步的,只是沒有角度的承諾,所以它很好地填充(現在我看到了如何去做);只需將deferred.resolve和deferred.reject作爲Trello的成功和回調方法直接傳遞就可以縮短一點,如下所示: Trello.post( '/路徑',{},deferred.resolve,deferred.reject); – Daniel