const install = (Vue, vm) => { // 是否正在刷新的标记 let isRefreshing = false // 重试队列,每一项将是一个待执行的函数形式 let requests = [] // 请求拦截器 uni.$u.http.interceptors.request.use((config) => { // if (!['mobile/chatLog/unReadMessageNum', 'mobile/Message/messageList'].includes(config.url)) { // uni.showLoading({ title: '请求中' }); // } const Headtoken = vm.$store.state.token if (Headtoken) { config.header['eva-auth-token'] = Headtoken; } return config }, config => { return Promise.reject(config) }) // 响应拦截器 uni.$u.http.interceptors.response.use((response) => { uni.hideLoading(); // 登录过期 if (response.data.code === 401) { if (!isRefreshing) { // 是否已经执行刷新 isRefreshing = true uni.login({ provider: 'weixin', success: async function (loginRes) { let { code } = loginRes; uni.request({ url: vm.$baseUrl + 'mobile/system/login', method: "GET", data: { code }, success: (res) => { isRefreshing = false vm.$store.commit('setToken', res.data.data) // 已经刷新了token,将所有队列中的请求进行重试 requests.forEach(item => item(res.data.data)) requests = [] } }); } }); } return new Promise((resolve) => { // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行 requests.push(token => { response.config.header['eva-auth-token'] = token resolve(uni.$u.http.request(response.config)); }) }) } if (response.data.code !== 200) { uni.showToast({ title: response.data.message || response.data.msg, icon: "none", duration: 2000 }); } return response.data; }, (response) => { return Promise.reject(response) }) } export default { install }