現在、複数の約束事すべてがブール値を返すように動作するAngularJSコントローラに取り組んでいます。このブール値に基づいて、結果として生じるブール値が決定される。戻り値がすべてtrue
の場合も結果はtrue
になりますが、1つの約束がfalse
を返す場合でも、結果はfalse
になります。現在、すべてのサービス/ DAOコールが連鎖しているため、1つの約束が拒否されると問題が発生します。私はこのような状況にどう対処するかが良い方法だと思います。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;
}]);
は、だから私は、複数の約束とどのようにすべての約束の最終結果を解決するためにどのように対処するより良い方法を探しています。また、結果を処理している間、アプリはフリーズするべきではありません。
EDIT
@str から$q.all
とソリューションは、最終的な結果のために正常に動作しますが、私はまた、すべてのサービスの個々の結果を必要としています。最終結果を処理しながら単一の値を処理することはできますか?
はサービスが並行して実行することはできますか? – str
'$ q.all'または' Promise.all'はこれらの約束をすべて平行して実行し、その結果の配列を与えることができます。 – ste2425
私はあなたの関数に成功とエラーのブロックである2つのコールバックを渡すことができると思います。両方の関数では、次の約束オブジェクトを返し、拒否された約束の状態を変数に保存して、このような実行は停止しません。 – Nirus