【发布时间】:2019-12-19 14:34:09
【问题描述】:
在我的 Vue 应用程序中,我实例化了一个 axios 实例,并在整个应用程序中使用它来处理 HTTP 请求。我已经设置了一个响应拦截器,它检查来自后端的任何响应是否为401 unauthorized,如果是,则显示一条警报消息。这个基本流程已经实现,但是您需要在警报消息上点击两次“确定”才能让它消失,我不知道为什么。
Axios 实例:
import axios, { AxiosError, AxiosInstance, AxiosResponse } from 'axios';
const axiosInstance: AxiosInstance = axios.create();
axiosInstance.interceptors.response.use(
(response: AxiosResponse) => response,
(error: AxiosError) => {
if(error.response && error.response.status === 401) {
alert('There has been an issue. Please log out and then log in again.');
return Promise.reject(error);
}
}
);
export default axiosInstance;
响应被拦截的请求:
import axiosInstance from 'axios-instance';
public async getloggedInUserId() {
await axiosInstance.get('/sessions.json')
.then((response) => {
if(response.data.user_id) {
this.SET_USER_ID(response.data.user_id);
}
});
}
我已阅读此主题,但我的问题似乎有所不同:Javascript alert shows up twice
我尝试将 return 语句从 return Promise.reject(error); 更改为 return false;,但这对我没有任何帮助。
【问题讨论】:
-
检查浏览器的网络控制台
-
能否请您检查并验证
function getloggedInUserId是否没有被调用两次? -
仅供参考,可能是也可能不是问题,但将您的
return Promise.reject(error)out 移出您的if(即,向下两行)。有了它,任何非 401 HTTP 错误都将被视为成功 -
@Phil 检查网络控制台让我可以确定调用第二个
alert()的确切位置,删除它解决了问题 - 谢谢! -
如果您认为您的解决方案可以帮助其他人,请随时在下面发布您自己的答案。否则,您可以直接关闭问题
标签: javascript typescript vue.js axios alert