【发布时间】:2015-12-11 15:03:50
【问题描述】:
我有以下函数来获取登录用户。我不得不说我已经从教程中复制了代码 - 因此我不知道后台到底发生了什么。
几分钟(20 分钟)后没有请求,令牌不再有效,如果调用 getCurrentUser(),我会得到一个白屏(来自后端的 HTTP 401) - 我的错误拦截器 $httpProvider.interceptors.push(errorInterceptor); 没有被调用。
我现在的问题是如何处理这种情况。是否可以在 getCurrentUser() 中强制 errorInterceptor- 调用或如何处理?
function getCurrentUser() {
var deferred = $q.defer();
if(currentUser){
deferred.resolve(currentUser);
} else {
getCurrentUserFromAPI().success(function(data) {
if(data) {
currentUser = data;
return deferred.resolve(currentUser);
}
}).error(function(data) {
var token = authTokenService.getToken();
if(token) {
authTokenService.deleteToken();
}
return deferred.reject(data);
});
}
return deferred.promise;
}
[编辑]
这是我在底部的拦截器,我认为当后端响应错误时总是调用 errorResponse 函数 - 例如HTTP 401,但是当调用函数 getCurrentUser 并且 HTTP 401 是来自服务器的响应时,不会调用此方法 - 因此我得到一个白屏。
其实我不知道该怎么做才能防止这个白屏? 在这种情况下我能做些什么吗?
(function() {
'use strict';
angular
.module('myProject.error')
.config(configure);
configure.$inject = ['$httpProvider'];
function configure($httpProvider) {
$httpProvider.interceptors.push(errorInterceptor);
////////////
function errorInterceptor($injector, $q, $location) {
var interceptor = {
responseError: responseError
};
return interceptor;
////////////
function responseError(response) {
alert('responseError')
switch(response.status) {
case ...
}
return $q.reject(response);
}
}
}
})();
【问题讨论】:
-
你的问题不清楚。请详细说明。