MrShi
10 天以前 e3be1fff523dafd3cce7bdcb594ac3e0e665f538
bicycle/utils/http.interceptor.js
@@ -1,4 +1,9 @@
const install = (Vue, vm) => {
   // 是否正在刷新的标记
   let isRefreshing = false
   // 重试队列,每一项将是一个待执行的函数形式
   let requests = []
   // 请求拦截器
   uni.$u.http.interceptors.request.use((config) => {
      const Headtoken = vm.$store.state.token
@@ -13,6 +18,37 @@
   
   // 响应拦截器
   uni.$u.http.interceptors.response.use((response) => {
      if (response.data.code === 5112) {
         if (!isRefreshing) {
            isRefreshing = true
            uni.login({
               provider: 'weixin',
               success: async function (loginRes) {
                  let { code } = loginRes;
                  uni.request({
                     url: vm.$baseUrl + 'web/account/wxLogin',
                     method: "GET",
                     data: { code },
                     success: (res) => {
                        console.log('res', res)
                        isRefreshing = false
                        vm.$store.commit('setToken', res.data.data.token)
                        vm.$store.commit('setUserInfo', res.data.data.userResponse)
                        // 已经刷新了token,将所有队列中的请求进行重试
                        requests.forEach(item => item(res.data.data.token))
                        requests = []
                     }
                  });
               }
            });
         }
         return new Promise((resolve) => {
            requests.push(token => {
               response.config.header['token'] = token
               resolve(uni.$u.http.request(response.config));
            })
         })
      }
      if (response.data.code === 5113) {
         uni.navigateTo({
            url: '/pages/index/index'