我面临的一个问题是,我拒绝的承诺没有被我的catch语句抓住。我认为我的代码中有一些错误,我想念它,但是我似乎无法发现它。
上下文是这样的:每当向我的django后端服务器发出请求时,它都会通过axios拦截器检查访问令牌是否有效。如果令牌无效,它将通过一系列逻辑来刷新此访问令牌,否则,如果条件满足,我将注销用户。
这是我的代码的片段:
axiosInstance.interceptors.response.use(
response => {
return response
},error => {
#####Bunch of unrelevant code######
if (error.response.data.code === "token_not_valid" &&
error.response.status === 401 &&
error.response.statusText === "Unauthorized")
{
###irrelevant code######
if (refreshToken){
###irrelevant code######
if (tokenParts.exp > now) {
return axiosInstance
.post('/token/refresh/', {refresh: refreshToken})
.then((response) => {
###irrelevant code######
})
.catch(err => {
store.dispatch(messageactions.returnErrors(err.response.data))
console.log(err.response.data)
});
}else{
console.log("Refresh token is expired", tokenParts.exp, now);
window.location.href = '/login/';
}
}else{
console.log("Refresh token not available.")
window.location.href = '/login/';
}
}
store.dispatch(messageactions.returnErrors(error.response.data))
console.log(error.response.data)
return Promise.reject(error);
}
);
export default axiosInstance;
现在,当拦截器内部发生错误时,问题就来了:
因此在我的一个组件中,有一个API get方法,它将调用axiosInstance。如果axiosinterceptor中发生错误,它不会被.catch()
所“抓住”,它仍将“认为”其有效,并尝试运行setState,这又将导致另一个错误>
apiGet() {
console.log('api get is called')
try {
axiosInstance.get('/customer-information/')
.then(response => {
this.setState({ customers: response.data });
$('#customerlist').DataTable({
"scrollY": "70vh",
"scrollCollapse": true,
"paging": false,
"scrollX": true
});
console.log(response)
})
} catch (error) {
console.log('faaaailed')
console.log(error.stack);
}
}
有人可以解释吗?我真的很感激!谢谢