我目前正在使用一個AngularJS控制器,該控制器應該與多個承諾一起工作,並返回一個布爾值。基於這個布爾值,將確定一個結果布爾值。如果所有返回的值都是true
,結果將爲true
,但即使只有一個承諾返回false
,結果也將是false
。目前我所有的服務/ DAO呼叫都被鎖定,如果一個承諾被拒絕,會導致一些麻煩。我想有一個更好的方法來處理這種情況。AngularJS處理多重承諾
控制器代碼:
app.controller('PromiseController', ['$scope', 'FirstService', 'SecondService', 'ThirdService',
'FourthService', function ($scope, FirstService, SecondService, ThirdService, FourthService) {
var vm = this;
vm.statusResult = false;
vm.statusSecond = null;
vm.statusThird = null;
vm.statusFourth = null;
vm.statusFirst = null;
SecondService.getStatus()
.then(function(returnData){
vm.statusSecond = returnData;
})
.then(function(){
return ThirdService.getStatus();
})
.then(function(returnData){
vm.statusThird = returnData;
})
.then(function(){
return FourthService.getStatus();
})
.then(function(returnData){
vm.statusFourth = returnData;
})
.then(function(){
return FirstService.getStatus();
})
.then(function(returnData){
vm.statusFirst = returnData;
})
.then(function(){
if(vm.statusThird&&vm.statusFourth&&vm.statusFirst&&vm.statusSecond){
vm.statusResult = true;
}
});
return this;
}]);
所以我在尋找一種更好的方式如何處理多個承諾以及如何解決所有的承諾的最終結果。此外,應用程序不應該在處理結果時凍結。
編輯
與$q.all
從@str該解決方案工作正常,最後的結果,但我也需要所有服務的個性化結果。我怎樣才能在處理最終結果的同時處理單個值?
可以並行運行的服務? – str
'$ q.all'或'Promise.all'可以並行運行所有這些承諾,然後給你一組結果。 – ste2425
我想你可以通過2回調你的當時的功能,這是成功和錯誤塊。在這兩個函數中返回下一個promise對象,並將被拒絕的promise的狀態保存在一個變量中,這樣執行就不會停止。 – Nirus