我目前正在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();
});
}
我已經在代碼中發現了問題所在的註釋。我對這個代碼不工作的原因感到茫然。根據我對承諾的理解,無論答案是什麼,錯誤就成功了,那麼'那麼'就應該解決。
我有一個攔截器正在運行,但我試過禁用它沒有運氣到最終的結果。
我錯過了什麼嗎?
401不會解析爲「錯誤」(或其它在Angular中調用的)嗎?錯誤函數是否運行? – 2014-12-05 16:21:14
它確實解決了一個錯誤,但如果我是正確的,那麼無論該承諾是成功還是錯誤,都應該解決。如果出現錯誤,應該調用控制器中.then的第二個函數。我錯了嗎? – Octothorpe 2014-12-05 16:23:13
...所以這是解決,並運行錯誤功能。這似乎是正確的,因爲HTTP調用會導致HTTP錯誤代碼。也許你正在描述錯誤發生的情況:錯誤函數被調用了嗎? – 2014-12-05 16:24:38