我需要创建链式承诺:
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
,第二个then
将被解决,并且它的 successCallback 将被调用。但如果我删除errorHandler
,那么第二个承诺将被拒绝。
根据 Angular JS 文档,传播拒绝的唯一方法是返回$q.reject();
,它看起来并不明显,特别是因为$q
即使不需要,我也必须注入服务;
也可以通过在 中抛出异常来完成errorHandler
,但是它将异常跟踪写入控制台,这不好。
是否有另一种选择以明确的方式做到这一点?原因是什么?为什么要完成?在哪种情况下,当前行为可能有用?