关于无感刷新

//响应拦截

service.interceptors.response.use(

    response => {

        if (response.data.code == 200) {

            return Promise.resolve(response.data);

        } else if (response.data.code == -3) {

            if (!isRefreshing) {

                isRefreshing = true;

                // 获取旧 token

                let token = sessionStorage.getItem("token");

                // 刷新token

                axios({

                    headers: {

                        "Content-Type": "application/x-www-form-urlencoded",

                        token: token

                    },

                    method: "get",

                    url: "/api/admin/user/refresh"

                })

                    .then(res => {

                        // 重新设置token;

                        // console.log(res, "刷新的token");

                        if (res.data.code == 200) {

                            sessionStorage.setItem(

                                "token",

                                res.data.data.token

                            );

                            // 重新请求接口 前过期的接口

                            response.config.headers.token = sessionStorage.getItem(

                                "token"

                            );

                            response.headers.token = `${res.data.data.token}`;

                            // token 刷新后将数组的方法重新执行

                            requests.forEach(cb => cb(res.data.data.token));

                            requests = []; // 重新请求完清空

                            return service(response.config);

                        }

                        // console.log(res, "2222");

                    })

                    .catch(err => {

                        console.log(err);

                        Message("刷新token失败,请重新登录");

                  

                    })

                    .finally(() => {

                        isRefreshing = false;

                    });

            } else {

                // 正在刷新token ,把后来的接口缓冲起来

                return new Promise(resolve => {

                    // 用函数形式将 resolve 存入,等待刷新后再执行

                    requests.push(token => {

                        response.headers.token = `${token}`;

                        resolve(service(response.config));

                        console.log(response.config, "要存起来的");

                    });

                });

            }

        } else {

            Message({

                type: "warning",

                center: "true",

                message: response.data.msg

            });

            return Promise.resolve(response);

        }

        return Promise.resolve(response.data);

    },

    error => {

        return Promise.reject(error);

    }

);

//但是有个问题 就是刷新token之后页面逻辑不会继续进行,不知道怎么处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值