axios拦截,多个接口返回同样的结果怎么只触发一次,比如弹窗

service.interceptors.response.use(response => {
           if (response.data.code === 3300) {
                removeCookie('data')
                Message({
                    message: response.data.msg,
                    type: 'error',
                    duration: 2000
                })
                route.push('/login')
            }
            3300是登录过期,但是经常会同时好几个接口都触发,导致弹窗好几个,怎么能限定只触发一次呢,用了flag=true也不行,因为是多个接口同时触发,并没有效果
阅读 5.5k
4 个回答

设一个全局变量flag,3300时判断flag是否为true,是则中止,否则设为true,并进行你原先的操作

let f;
service.interceptors.response.use(response => {

       if (response.data.code === 3300) {
            if(f) return
            f=true
            removeCookie('data')
            Message({
                message: response.data.msg,
                type: 'error',
                duration: 2000
            })
            route.push('/login')
           
        }
新手上路,请多包涵

我们也遇到过这种情况,解决办法就是给Message方法包装一下,加上节流就好了!!

一般Message都会返回一个实例,然后用这个来判断?如果没有的话自己也可以封装一层
例如

let message = null;

if (!message) {
  message = Message({
   message: response.data.msg,
   type: 'error',
   duration: 2000
 })
}

// 想应的也会有一个close的方法,在需要关闭的时候使用
message.close()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题