我需要创建链式Promises:
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;
});
如果我把一个错误回调函数放在第一个then
里,第二个then
将会被解决并且它的成功回调函数将会被调用。但是如果我移除errorHandler
,那么第二个promise将会被拒绝。
根据Angular JS文档,唯一传播拒绝的方法是返回$q.reject();
,但这看起来不太明显,特别是因为我必须注入$q
服务,即使它没有被使用;
还可以通过在errorHandler
中抛出异常来实现,但它会将异常跟踪写入控制台,这不好。
有没有其他的清晰方式来做到这一点?原因是什么?在哪种情况下,当前行为可能是有用的?
.catch(function(){})
代替.then(null, function(){})
。 - Dinistro