如何在$ http承诺中抛出错误

Mon*_*key 4 angularjs angular-promise

我有一个角度服务,包装我的其余api调用并返回$ http承诺.

我的问题是如何抛出一个错误,以便调用触发.error方法的promise?我不想抛出错误,因为我希望它在调用函数中使用.success/.error而不是在它周围执行try catch块.

myFunction: function(foo)
   if (foo) {
      return $http.put(rootUrl + '/bar', {foo: foo});
   }
   else {
      //what do I return here to trigger the .error promise in the calling function
   }
Run Code Online (Sandbox Code Playgroud)

Ant*_*nov 6

你不需要$q.defer().和else太.您可以直接使用拒绝:

myFunction: function(foo) {
    if (foo) {
        return $http.put(rootUrl + '/bar', {foo: foo});
    }

    return $q.reject("reject reason");
}
Run Code Online (Sandbox Code Playgroud)

请参阅https://docs.angularjs.org/api/ng/service/ $ q #deput


Gus*_*tav 0

首先在您的服务中注入 $q-service 。然后在你的其他中:

else {
     var deferred = $q.defer();
     deferred.reject("reject reason, foo was false");
     return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)

不像 Blazemonger 那样聪明,但很快就能做到。

  • 你可以简单地执行 `$q.reject("reject Reason, foo was false");`,没有理由在此处创建 Promise 实例。 (2认同)