我知道如何链接 Promise,以便执行多个成功函数。这在许多示例中已经解释过了。那么,如何链接 Promise,以便执行多个错误函数?
当错误被处理后(且要么返回一个值,要么不返回任何值),从 then 返回的 Promise 被视为已解决。您必须从每个错误处理程序中返回一个 rejected Promise,以便传播和链接错误处理程序。
例如:
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();
});
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");
}
或者你可以使用then
方法,将errorHandler1
和errorHandler2
作为第二个参数传递,而不是使用catch
。
$exceptionHandler
,而且我认为这不是OP想要的。 - Benjamin Gruenbaumthrow
是完全可以的,因为 $exceptionHandler hack 不存在 - 尽管你不应该在新代码中继续使用 Q。 - Benjamin GruenbaumQ
使用Promises/A+
标准以及本地实现,所以我猜总体方法也是相同的,对吗?返回一个被拒绝的Promise也是Promises/A+
标准吗? - Max Koretskyi