【发布时间】:2013-09-16 11:21:44
【问题描述】:
我需要创建链式承诺:
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中抛出异常来完成,但是它将异常跟踪写入控制台,这不好。
是否有另一种方法可以明确地做到这一点?原因是什么?为什么要完成?在哪种情况下,当前行为可能有用?
【问题讨论】:
标签: javascript angularjs promise