チェーンされたプロミスを作成する必要があります:
var deferred = $q.defer();
$timeout(function() {
deferred.reject({result: 'errror'});
}, 3000);
deferred.promise.then(angular.noop, function errorHandler(result) {
//some actions
return result;
}).then(function successCallback(result) {
console.log('what do I do here?');
return result;
}, function errorCallback(result) {
$scope.result= result;
return result;
});
最初に errorCallback を入れるthen
と、2 番目then
が解決され、その successCallback が呼び出されます。しかし、削除するerrorHandler
と、2 番目の約束は拒否されます。
Angular JS docs によると、拒否を伝播する唯一の方法は戻ることであり、特にサービスが必要ない場合でもサービス$q.reject();
を注入する必要があるため、明らかではないようです。$q
で例外をスローすることでも実行できますがerrorHandler
、コンソールに例外トレースを書き込むので、良くありません。
これを明確な方法で行う別のオプションはありますか? そしてその理由は何ですか?なぜそれが行われるのですか?どのような場合に、現在の動作が役立つでしょうか?