$ http / $ q / promise问题(Angular)

时间:2015-07-29 21:17:29

标签: javascript angularjs promise angular-promise angular-http

当$ q / $ http触发onReject阻止时,我似乎无法理解。

假设我有一个基本的电话:

$http.get('/users')
  .then(function(res) {
    return res.data;
  }, function(err) {
    console.log(err);
  });

如果我得到500 Internal Server Error我将会在onSuccess区块中结束。从我对承诺的微薄了解,我想这似乎是正确的,因为我在技术上得到了回应?问题是onSuccess块似乎是错误的地方有一堆

if(res.status >= 400) {
  return $q.reject('something went wrong: ' + res.status);
}

这样我的onReject块就可以运行了。这是它的工作方式吗?大多数人在onSuccess区块中处理400多个状态,或者他们是否返回被拒绝的承诺以强制onReject阻止?我错过了更好的方法来解决这个问题吗?

我尝试在httpInterceptor中执行此操作,但我找不到从此处返回被拒绝的承诺的方法。

this.responseError = function(res) {
  if(res.status >= 400) {
    // do something
  }

  return res;
};

2 个答案:

答案 0 :(得分:1)

您的成功阻止不会被击中。试试这个,如果错误代码>看到错误块将会命中。 300。

$http.get('/users').success(function(data, status, headers, config) {
    // this callback will be called asynchronously
    // when the response is available
  }).error(function(data, status, headers, config) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

答案 1 :(得分:0)

您可以在拦截器中处理这些,而不是在回调中。

在app.config中,您可以将$ httpProvider配置为以下内容:

$httpProvider.interceptors.push(['$q', function ($q) {
    return {
        request: function (config) {
            //do something 
            return config;
        },
        responseError: function (response) {
            if (response.status === 401) {
                //handle 401
            }
            return $q.reject(response);
        }
    };
}]);