Files
a_long/utils/request.js
2026-06-14 02:38:05 +08:00

66 lines
2.0 KiB
JavaScript

// utils/request.js
const app = getApp();
function request(options) {
const token = wx.getStorageSync('token');
const header = {
'Content-Type': 'application/json',
...options.header,
};
if (token) {
header['Authorization'] = 'Bearer ' + token;
}
return new Promise((resolve, reject) => {
wx.request({
url: app.globalData.apiBaseUrl + options.url,
method: options.method,
data: options.data || {},
header,
success: async (res) => {
if (res.statusCode === 401 || res.statusCode === 403) {
// 如果当前正在执行静默登录,等待登录完成后重试一次
if (app.globalData.loginPromise) {
try {
await app.globalData.loginPromise; // 等待登录成功
// 登录成功后重新发起原请求,并将结果返回给调用方
const retryRes = await request(options);
resolve(retryRes);
} catch (err) {
// 登录失败,按原逻辑弹窗
wx.showModal({
content: '操作失败,请先登录',
success: (modalRes) => {
if (modalRes.confirm) {
wx.removeStorageSync('token');
wx.reLaunch({ url: '/pages/wode/wode' });
}
},
});
resolve(res); // 返回原始响应让调用方知晓
}
return;
}
// 无登录流程进行中,直接弹窗(原逻辑)
wx.showModal({
content: '操作失败,请先登录',
success: (modalRes) => {
if (modalRes.confirm) {
wx.removeStorageSync('token');
wx.reLaunch({ url: '/pages/wode/wode' });
}
},
});
resolve(res);
return;
}
// 正常响应
resolve(res);
},
fail: reject,
});
});
}
export default request;