【问题标题】:return an error from $http.success从 $http.success 返回错误
【发布时间】:2015-09-04 14:30:48
【问题描述】:

我在 Angular 中工作,当在 .success() 中解决结果时,我需要向更下游的 Promise 表示错误。

我从我的控制器调用我的服务中的一个函数,例如

myService.myFunction().then(
   function(results){
      // do success stuff
   },
   function(err){
      // do failure stuff
   });

myFunction 类似于

myFunction(){
    return $http.get('url')
       .success(function(results){})
       .error(function(err){})
}

基于某些条件,即使 $http.get().success() 被触发,我也需要让 .then() 执行 errorCallback。如何让它看起来像 $http 收到错误?

【问题讨论】:

    标签: angularjs callback promise


    【解决方案1】:

    要实现此目的,您需要做一些修复,即使用 then 而不是 $http 上的 success 函数。

    then 成功回调中,您可以执行return $q.reject(errorData) 来拒绝整个链中的承诺。

    return $http.get('url').then(function(results){
        if(condition) {
          return $q.reject(errorData);
        }
        return result.data;  //then callback get a object with properties
    },function(error) {
          return $q.reject(error);
      })
    

    success 返回原始的$http 承诺,而then 返回一个承诺,该承诺通过成功和错误回调的返回值得到解决。

    【讨论】:

    • 我认为问题是我的数据库出错了,但他的服务器仍在发送状态码 200。状态码是 Angular 如何确定 $http 成功或失败的,我可以通过从服务器发送失败状态?
    • 是的,它是标准的http。 2xx都是成功的。如果服务器返回 4xx 或 5xx 那么你将进入错误路径。
    猜你喜欢
    • 2014-03-29
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 2016-04-13
    • 2017-01-02
    相关资源
    最近更新 更多