gpt4 book ai didi

angularjs - AngularJS从后端获取当前用户-错误拦截器

转载 作者:行者123 更新时间:2023-12-03 08:53:33 26 4
gpt4 key购买 nike

我具有以下功能来获取登录用户。我不得不说我已经从一个教程中复制了代码-因此我不知道背景到底发生了什么。
几分钟(20分钟)后,没有任何请求, token 不再有效,如果调用了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);
}
}
}

})();

最佳答案

deffered方法中的数据为空时,您似乎无法解析.success

尝试这个:

function getCurrentUser() {

if (currentUser) return $q.when(currentUser);

return getCurrentUserFromAPI(
).then(function(response) {
if (response.data) {
currentUser = response.data;
return currentUser;
} else {
currentUser = null;
throw null;
}
},function(error) {
var token = authTokenService.getToken();
if (token) {
authTokenService.deleteToken();
};
throw error;
});
};
};

弃用通知
.success服务现已弃用 .error$http方法。而是使用 .then.catch.finally方法。有关更多信息,请参见 AngularJS $http Service API Reference

关于angularjs - AngularJS从后端获取当前用户-错误拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34161427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com