AngularJS控制器逻辑不执行
我调用了一个API来验证用户的存在。如果找到一个用户,它将发送200,否则它将发送404。下面是我的AngularJS控制器。出于某种原因,通过开发工具,我看到404从API返回,但该控制器不遵循编程逻辑。它什么也不做。当收到200时,它将按预期执行。有什么想法吗AngularJS控制器逻辑不执行,angularjs,Angularjs,我调用了一个API来验证用户的存在。如果找到一个用户,它将发送200,否则它将发送404。下面是我的AngularJS控制器。出于某种原因,通过开发工具,我看到404从API返回,但该控制器不遵循编程逻辑。它什么也不做。当收到200时,它将按预期执行。有什么想法吗 var params = $stateParams.resetToken; var foundUser; $http.get('/api/user/' + params, { }) .then(function
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);
}
});
未成功的响应将被视为拒绝的承诺,因此您需要这样处理
$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
}
});
看
介于200和299之间的响应状态代码被视为成功状态,并将导致调用成功回调。超出该范围的任何响应状态代码都被视为错误状态,并将导致调用错误回调
使用
.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
方法的第二个参数。404不被视为成功,因此onSuccess()
回调不会触发。您应该添加一个错误子句并在那里执行您的失败代码。感谢您的快速响应和解释。我正在查看您提供的资源。我更新了原始问题中的代码。我得到了同样的结果。@CiscoKidx你添加了另一个然后方法,这不是我上面的答案。真的吗?你投票否决了我,因为我没有选择你的答案?@CiscoKidx不,我不在乎你接受哪个答案,只是指出你添加了额外的处理程序,然后添加了处理程序,而不是添加错误处理程序,因为第二个参数err
没有定义。此外,不处理拒绝会将承诺转化为成功解决的承诺。