import UNI_APP from '@/.env.js' // 请求队列 let requestList = []; // 是否正在刷新中 let isRefreshToken = false; const request = (options) => { const header = options.header || {}; const loginInfo = uni.getStorageSync("loginInfo"); if (loginInfo) { header.accessToken = loginInfo.accessToken; } return new Promise(function(resolve, reject) { uni.request({ url: UNI_APP.BASE_URL + options.url, method: options.method || 'GET', header: header, data: options.data || {}, async success(res) { if (res.data.code == 200) { return resolve(res.data.data) } else if (res.data.code == 400) { getApp().exit(); } else if (res.data.code == 401) { console.log("token失效,尝试重新获取") if (isRefreshToken) { // 正在刷新token,把其他请求存起来 requestList.push(() => { resolve(request(options)) }) return; } isRefreshToken = true; // 发送请求, 进行刷新token操作, 获取新的token const res = await reqRefreshToken(loginInfo); if (!res || res.data.code != 200) { requestList = []; isRefreshToken = false; console.log("刷新token失败") getApp().exit(); return; } uni.setStorageSync("loginInfo", res.data.data); requestList.forEach(cb => cb()); requestList = []; isRefreshToken = false; // 重新发送刚才的请求 return resolve(request(options)) } else { uni.showToast({ icon: "none", title: res.data.message, duration: 1500 }) return reject(res.data) } }, fail(error) { uni.showToast({ title: "网络似乎有点不给力,请稍后重试", duration: 1500 }) return reject(error) } }); }); } const reqRefreshToken = (loginInfo) => { return new Promise(function(resolve, reject) { uni.request({ method: 'PUT', url: UNI_APP.BASE_URL + '/refreshToken', header: { refreshToken: loginInfo.refreshToken }, success: (res) => { resolve(res); }, fail: (res) => { reject(res); } }); }); } export default request;