当$ 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;
};
答案 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);
}
};
}]);