나는 $ 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
});
그러나 아래 그림과 같이 여러 개의 아약스는 내가 사용하고 $의 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 (약속) 내부에서 사용하고있는 논리에 의문이 생깁니다. 올바른 접근인가? 또는 $ 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'에 대해 물어 보려는 모든 코드를 정말로 볼 필요가 있습니까? –
then() 함수 안에 angular.forEach (allData, function (data) {...})와 같은 것을 수행하길 원하십니까? – smart987