我调用了一个验证用户是否存在的API。如果找到用户,它将发送200,否则它将发送404.下面是我的AngularJS控制器。出于某种原因,通过开发人员工具,我看到404从我的API返回,但该控制器不遵循编程逻辑。它什么都不做。当收到200时,它按预期执行。有什么想法吗?
var params = $stateParams.resetToken;
var foundUser;
$http.get('/api/user/' + params, {
})
.then(function onSuccess (res) {
foundUser = true;
})
.then(function onError(res) {
if (res.status === 404) {
foundUser = false;
$location.path('/lost');
} else {
console.log(err);
}
});
答案 0 :(得分:2)
使用.catch
处理状态404回复。
var params = $stateParams.resetToken;
var foundUser;
$http.get('/api/user/' + params, {
})
.then(function onSuccess (res) {
foundUser = true;
//return to chain success
return res;
})
//.then(function onError(res) {
//USE catch to handle errors
.catch(function onError(res) (
if (res.status === 404) {
foundUser = false;
$location.path('/lost');
} else {
console.log(res);
}
//throw to chain rejection
throw res;
});
错误处理程序应该是.catch
方法的第一个参数或.then
方法的第二个参数。
答案 1 :(得分:-1)
非成功回复将被视为被拒绝的承诺,因此您需要按此处理
$http.get('/api/user/' + params).then(function onSuccess(res) {
// ...
}, function onError(res) {
if (res.status === 404) {
// handle the 404 here
} else {
return $q.reject(res); // don't swallow the error if it's unexpected
}
});
请参阅https://docs.angularjs.org/api/ng/service/$http#general-usage
200到299之间的响应状态代码被视为成功状态,并将导致调用成功回调。任何超出该范围的响应状态代码都被视为错误状态,并将导致调用错误回调。