比方说刚进入某个页面的时候有3个请求,3个请求不需要确定先后顺序,有做token验证。若token过期,Message就会提示3次,然后跳转到登录页,如果我就想只提示1次,请问有什么比较好的处理方案么。
尝试过等某个请求成功,然后做callBack处理,感觉不是特别好。
比方说刚进入某个页面的时候有3个请求,3个请求不需要确定先后顺序,有做token验证。若token过期,Message就会提示3次,然后跳转到登录页,如果我就想只提示1次,请问有什么比较好的处理方案么。
尝试过等某个请求成功,然后做callBack处理,感觉不是特别好。
楼主,可以借用 axios
提供的 cancel token
。 贴下具体实现的代码:
+ const CancelToken = axios.CancelToken;
+ const pending = [];
service.interceptors.response.use(
response=>{
const res=response.data;
return response.data;
},err=>{
console.log(err);
let errCode=err.response.data.errCode;
let errMsg=err.response.data.errMsg;
if(errCode===500&&errMsg=='Invalid token'){
+ // 登录超时,接口请求多次,导致弹框会多次出现,方案:只弹一次
+ while (pending.length > 0) {
+ pending.pop()('请求中断');
+ }
...
}
else if(errCode===500&&errMsg=='No authority'){
// 登录超时,接口请求多次,导致弹框会多次出现,方案:只弹一次
+ while (pending.length > 0) {
+ pending.pop()('请求中断');
+ }
...
}
}
)
+ // axios 相关配置修改
+ const defaultConfig = {}
+ defaultConfig.cancelToken = new CancelToken(function executor(c) {
+ // An executor function receives a cancel function as a parameter
+ pending.push(c);
+ });
axios(defaultConfig);
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
2 回答4.7k 阅读✓ 已解决
4 回答4.3k 阅读✓ 已解决
1、可以选择防抖,延时处理token验证。
2、添加一个全局变量(或者vuex),标记是否已进行token验证,如果有,则不再进行提醒