gpt4 book ai didi

javascript - AngularJS 处理多个 promise

转载 作者:行者123 更新时间:2023-11-30 07:34:20 25 4
gpt4 key购买 nike

我目前正在开发一个 AngularJS Controller ,它应该可以处理多个 promise ,所有 promise 都返回一个 bool 值。基于此 bool 值,将确定结果 bool 值。如果所有返回值都是 true,那么结果也将为 true,但即使只有一个 promise 返回 false,结果也将为 false 。目前我所有的服务/DAO 调用都被链接起来,如果一个 promise 被拒绝,这会导致一些麻烦。我想有更好的方法来处理这种情况。

Controller 代码:

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;

}]);

所以我正在寻找一种更好的方法来处理多个 promise 以及如何解决所有 promise 的最终结果。此外,应用在处理结果时不应卡住。


编辑

来自 @str$q.all 的解决方案对于最终结果来说效果很好,但我还需要所有服务的单独结果。我如何才能在处理最终结果的同时处理单个值?

最佳答案

您可以使用 $q.all等待所有的 promise :

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;
});

关于javascript - AngularJS 处理多个 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38783927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com