【发布时间】:2015-06-18 09:59:58
【问题描述】:
我知道如何链接承诺,以便执行多个成功函数。这在许多例子中得到了说明。如何链接 promise 以执行多个错误函数?
【问题讨论】:
-
对我来说这不是重复的。感谢您回答我的问题。
标签: angularjs promise deferred
我知道如何链接承诺,以便执行多个成功函数。这在许多例子中得到了说明。如何链接 promise 以执行多个错误函数?
【问题讨论】:
标签: angularjs promise deferred
当错误被处理(并且,要么返回一个值,要么根本没有值),从那时返回的承诺被认为已解决。您必须从每个错误处理程序返回一个被拒绝的承诺,以便传播和链接错误处理程序。
例如:
promseA.then(
function success() {
},
function error() {
return $q.reject();
})
.promiseB.then(
function success() {
},
function error() {
return $q.reject();
})
.promiseC.then(
function success() {
},
function error() {
return $q.reject();
});
【讨论】:
return $q.reject() 确实是比 throwing 更好的选择,但也许您也可以将此选项添加到您的答案中,以便 OP 如果看到这种技术就会识别它。
then/fail 函数返回一个promise,可以通过抛出错误来拒绝它。如果你想链接多个错误处理程序并触发它们,你应该从前面的错误处理程序中抛出错误。
var d = $q.defer();
d.promise.catch(errorHandler1).catch(errorHandler2);
d.reject();
function errorHandler1 {
throw new Error();
}
function errorHandler2() {
console.log("I am triggered");
}
或者代替catch,您可以使用then 方法并将errorHandler1 和errorHandler2 作为第二个参数传递。
【讨论】:
$exceptionHandler,而且我认为这不是 OP 想要的。
return $q.reject();这样的选项。这比抛出错误要好得多。这也是Q 库的标准,而不仅仅是角度的$q?
throw 完全没问题,因为 $exceptionHandler hack 不存在 - 尽管你真的不应该再在新代码中使用 Q。