关于iview Message多次提示的问题

比方说刚进入某个页面的时候有3个请求,3个请求不需要确定先后顺序,有做token验证。若token过期,Message就会提示3次,然后跳转到登录页,如果我就想只提示1次,请问有什么比较好的处理方案么。

尝试过等某个请求成功,然后做callBack处理,感觉不是特别好。

阅读 4.3k
2 个回答

1、可以选择防抖,延时处理token验证。
2、添加一个全局变量(或者vuex),标记是否已进行token验证,如果有,则不再进行提醒

楼主,可以借用 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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题