我使用angularjs的$ http方法獲取多個「父」元素。在這個Ajax調用.success方法中,我必須迭代父元素,並對每個父元素使用另一個Ajax調用來獲取其各自的子元素。我最終想要的是一個包含所有子元素對象的數組,因此我可以使用ng-repeat來顯示它們。這就是爲什麼我要首先收集數組中的所有子元素,並將該數組寫入到我用來顯示的範圍數組中,所以角度只會在收集所有子元素時更新。我並不擅長使用承諾,但我認爲這應該可以通過使用它們。結構基本上是:在另一個Ajax請求中處理多個Ajax請求
.success(function(parentElements){
var tempChildElements = [];
$.each(parentElements, function(i, parentElement){
getChildElements(parentElement)
.success(function(childElements){
tempChildElements.concat(childElements);
})
})
});
$scope.childElements = tempChildElements;
});
基本上,我需要知道什麼時候jQuery.each中的所有請求都完成了。
編輯:
於是,我改變了我的代碼,以將您的答案,我想我接近,但它仍然沒有工作。我得到的是:
$scope.loadChildren = function(){
var tempchildren = [];
var promises = [];
restApi.getOwnparents() //Returns $http.get promise
.then(function(parents){
parents.data.forEach(function(parent, i, parents){
promises.push(restApi.getOwnchildren(parent) //Returns $http.get promise
.then(function(children){
tempchildren = tempchildren.concat(children.data);
},function(msg){
console.log(msg);
}));
});
}, function(msg){
console.log(msg);
});
$q.all(promises).then(function(data){
//Never gets called
$scope.currentElements = tempchildren;
console.log(tempchildren);
});
};
編輯2: 我得到了它使用從你們的建議的工作,下面是我的代碼。隨意分享改進。
$scope.loadparents = function(){
var tempchildren = [];
var promises = [];
restApi.getOwnparents()
.then(function(parents){
parent.data.forEach(function(parent, i, parents){
promises.push(restApi.getOwnchildren(parent));
});
$q.all(promises).then(function(data){
console.log(data);
data.forEach(function(children){
tempchildren = tempchildren.concat(children.data);
});
$scope.currentElements = tempchildren;
});
});
};
首先擺脫'$,each'如果'parentelements'是一個數組,你可以使用本地'forEach',否則使用'angular.forEach'。看看'$ q.all'它會在所有解決方案調用它的'then'後運行一系列promise – ste2425