В настоящее время я работаю над созданием потока входа в систему в 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();
});
}
Я разместил комментарии в коде, где проблема. Я в недоумении, почему этот код не работает. Насколько я понимаю обещания, то «тогда» должно разрешаться независимо от того, каким был ответ, успех или ошибка.
У меня работает перехватчик, но я пытался отключить его, но безрезультатно.
Я что-то упускаю?
error
(или как там это называется в Angular)? Функция ошибки работает? - person Dave Newton   schedule 05.12.2014then
. Функция успеха и функция отказа. Если вы не передадите функцию отказа, она не будет запущена. Первая функция запускается только в случае успеха, а код ошибки HTTP 400+ не является успешным. Если ваш код устанавливает HTTP-код, вам необходимо принять это во внимание. Попробуйте добавить обработчик ошибок в код входа. - person Dave Newton   schedule 05.12.2014then
без успеха, пока не выключил свой перехватчик, который у меня работает. Теперь я регистрирую как минимум ошибку внутри обещания сеанса. Это может помочь мне отследить эту ошибку. - person Octothorpe   schedule 05.12.2014