角度$http承诺无法解决
Angular $http promise not resolving
我目前正在AngularJS 1.3中构建登录流程。 我的问题是$http调用返回的承诺没有解析其".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
的第二个函数。如果你不通过一个,它应该会爆炸;这就是调用更高级别的错误函数的原因。
相关文章:
- 如何在解决承诺之前和之后验证值
- EmberJS:在成功处理请求时解决承诺
- 蓝鸟没有正确解决承诺
- 使用 $http.post 和 res.redirect,而不解决承诺
- 如何在解决承诺后从承诺对象获取值
- 在解决承诺 AngularJS/ES6 后检索存储在服务中的数据
- CSV 完成读取后,如何解决承诺
- 茉莉花间谍和解决承诺
- 如何在轮询时不断解决Q承诺
- 拒绝并解决Q承诺
- 基于另一个承诺解决承诺
- 立即解决承诺
- 通过离子/ui路由解决承诺
- 我可以选择只在if语句的一部分中解决承诺吗
- 开玩笑-在测试前解决承诺
- 多次解决承诺
- 让双方都期待解决承诺
- 问美元.所有这些都在解决承诺之前被调用
- 在angular中解决承诺
- Angularjs单元测试解决承诺