如何在angularjs中链接promise promise函数

时间:2015-04-13 06:54:08

标签: angularjs promise deferred

我知道如何链接promises以便执行多个成功函数。在许多例子中都提到了这一点。如何链接promises以便执行多个错误函数?

2 个答案:

答案 0 :(得分:32)

当处理错误(并且返回值或根本没有值)时,从那时返回的承诺被视为已解决。您必须从每个错误处理程序返回被拒绝的承诺,以便传播和链接错误处理程序。

例如:

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();
   });

答案 1 :(得分:0)

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方法并将errorHandler1errorHandler2作为第二个参数传递。