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

发布于 2022-09-13 00:17:29 字数 485 浏览 19 评论 0

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也不行,因为是多个接口同时触发,并没有效果

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

_失温 2022-09-20 00:17:30

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

望她远 2022-09-20 00:17:30

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')
           
        }
别想她 2022-09-20 00:17:30

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

满地尘埃落定 2022-09-20 00:17:30

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

let message = null;

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

// 想应的也会有一个close的方法,在需要关闭的时候使用
message.close()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文