我目前正在开发一个AngularJS控制器,该控制器应该使用多个promises并返回一个布尔值。基于此布尔值,将确定结果布尔值。如果返回的所有值均为{{count($errors)}}
,则结果将为true
,但即使只有一个承诺返回true
,结果也会为false
。目前我的所有服务/ DAO呼叫都被链接起来,如果一个承诺被拒绝,会导致一些麻烦。我想有更好的方法来处理这种情况。
控制器代码:
false
所以我正在寻找一种更好的方法来处理多个承诺以及如何解决所有承诺的最终结果。此外,应用程序在处理结果时不应冻结。
修改
来自 @str 的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;
}]);
的解决方案适用于最终结果,但我还需要所有服务的单独结果。如何在处理最终结果的同时处理单个值?
答案 0 :(得分:7)
您可以使用$q.all
等待所有承诺:
var promises = [
FirstService.getStatus(),
SecondService.getStatus(),
ThirdService.getStatus(),
FourthService.getStatus(),
];
$q.all(promises)
.then(function (serviceResults) {
vm.serviceResults = serviceResults; // result of first promise will be available in vm.serviceResults[0]
vm.statusResult = serviceResults.every(function (serviceResult) {
return serviceResult;
});
})
.catch(function() {
vm.statusResult = false;
});