我正面臨解決使用$ q.all的承諾的問題,任何人都可以幫助我嗎?
當我有一個承諾,下面已經工作得很好:
var dashlettePromise = DashboardsDataService.getTabDetails(dashboardData);
dashlettePromise.then(function(data) {
var template = '<div class= "allChartsDiv">';
for (var dashVar = 0; dashVar < data.tabDetails.length; dashVar++) {
var dashletteId = data.tabDetails[dashVar].dashletteId; // Added
....
}
}, function(error) {
alert(error);
}, function(progress) {
// report progress
});
但我需要讓多個Ajax調用,所以我使用了$ q.all如下圖所示:
var promises = [];
angular.forEach(dashboardslayoutArray, function(dashboardslayout) {
dashboardData.dashletteBeansList = [];
dashboardData.dashletteBeansList[0] = dashboardslayout;
var dashlettePromise = DashboardsDataService.getTabDetails(dashboardData);
promises.push(dashlettePromise);
});
現在我需要逐個解決$ q.all中的所有承諾,就像我上面解釋的單個承諾一樣。所以我使用了下面顯示的代碼,但它沒有按預期工作。我懷疑我在$ q.all(promise)中使用的邏輯來解決承諾。這是正確的方法嗎?或者任何一個人能否提出更好的方法來解決$ q.all中的承諾?
$q.all(promises)
.then(function(allData) {
// all promises were resolved here
angular.forEach(promises, function(eachPromise) {
eachPromise.then(function(data) {
for (var dashVar = 0; dashVar < data.tabDetails.length; dashVar++) {
var dashletteId = data.tabDetails[dashVar].dashletteId; // Added
var axisType = data.tabDetails[dashVar].axisType;
.....
}
}, function(error) {
alert(error);
})
})
});
您的第一個循環沒用:因爲您已經擁有了allData數組中的所有數據,所以您不應該在'then()'函數內明確引用'promises'。不知道我是否足夠清楚。 – Blackhole
@Blackhole說了些什麼,還有......我們是否真的需要查看您發佈的所有代碼以詢問'$ q.all'? –
你想讓我做一些像angular.forEach(allData,function(data){...})在then()函數中嗎? – smart987