【发布时间】:2015-10-21 01:47:33
【问题描述】:
当 $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;
};
【问题讨论】:
-
如果有 400+ 错误代码,那么您的成功块将不会被命中。它会调用你的错误处理程序
-
很可能你有一个
httpInterceptor代表responseError- 有一个拦截器意味着你“处理”了错误(除非你明确地return $q.reject),从而导致@987654336 的成功处理程序@ -
@NewDev 啊,就是这样,谢谢。我没有考虑在我的
responseError中执行return res的含义以及这将如何返回一个新的、已解决的承诺而不是被拒绝的承诺。 -
正确.. 完全正确。至于这个问题 - 也许最好删除它,因为问题的内容不包含问题的原因
标签: javascript angularjs promise angular-promise angular-http