[英]Angular $http promise not resolving
我目前正在AngularJS 1.3中构建登录流程。 我的问题是,从$ http调用返回的promise不能解析其'.then'内部的代码。
我正在处理从服务器返回的错误消息,特别是处理用户输入错误的用户名或密码时返回的任何401错误。 但是,当返回401时,.then永远不会自行解析,并且其中的代码也永远不会运行。
相关代码如下:
作为其登录功能的登录表单的控制器,如下所示:
$scope.login = function() {
$scope.authError = null;
// Try to login
var promise = session.login($scope.user);
promise.then(function(loggedIn) {
// THIS CODE NEVER RUNS
if ( !loggedIn ) {
$scope.authError = localizedMessages.get('login.error.invalidCredentials');
}
}, function(x) {
$scope.authError = localizedMessages.get('login.error.serverError', { exception: x });
});
};
我有一个会话工厂,负责登录和其他基于会话的需求。 登录代码为:
login: function(credentials) {
var $http = $injector.get('$http');
var url = ENV.apiEndpoint + "/sessions";
var newSession = $http.post(url, credentials);
return newSession.then(function(data) {
session.set(data.token);
//THIS CODE ONLY RUNS ON A SUCCESS RESPONSE
if(session.isAuthenticated()) {
closeLoginModal(true);
}
return session.isAuthenticated();
});
}
我已经在问题所在的代码中添加了注释。 我不知道为什么这段代码无法正常工作。 从我对诺言的理解来看,无论回应是什么,“那么”都应该解决,即错误的成功。
我有一个拦截器正在运行,但是我尝试禁用它,但最终结果没有运气。
我想念什么吗?
如果您的登录名(服务器端)返回HTTP错误代码(例如401),则应解决错误,例如,传递给then
的第二个函数。 如果您不通过,它应该被炸开。 这就是为什么您的高级错误函数会被调用的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.