一:流程导图

二:代码实现(http.js)
import md5 from './md5';
let temp_request = [],
is_freshing = false;
const http = function (url, method, data, loading) {
let params_ = arguments;
return new Promise((resolve, reject) => {
if (loading) {
wx.showToast({
title: '加载中',
icon: 'loading',
duration: 10000,
});
}
var userId = wx.getStorageSync('userInfo').userId || '';
const timestamp = new Date().getTime();
const random = parseInt(Math.random() * 10000);
const token = wx.getStorageSync('userInfo').token || '';
wx.request({
url,
method,
data,
header: {
'content-type': 'application/json',
os: 'wechatBusinessApplet',
uid: userId,
random: random,
timestamp: timestamp,
sign: md5(`${userId}@${timestamp}_${random}&${token}=${userId}`),
},
success(res) {
let code = res.data.status;
switch (code) {
case 1:
resolve(res.data);
break;
case 200:
resolve(res.data);
break;
case 401:
if (!is_freshing) {
refresh();
}
resolve(
new Promise((resole) => {
temp_request.push(() => {
resole(http(...params_));
});
})
);
break;
case 500:
resolve(res.data);
break;
case 50001:
resolve(res.data);
break;
case 50002:
resolve(res.data);
break;
default:
reject(res.data);
}
},
fail(error) {
reject(error.data);
},
complete(res) { },
});
});
};
function refresh() {
is_freshing = true;
wx.login({
success: function (res) {
if (res.errMsg === 'login:ok') {
wx.request({
url: `xxxxx`,
data: {},
header: {},
success(res) {
if (res.data) {
} else {
is_freshing = false;
temp_request.map((cb) => cb());
temp_request = [];
}
}
},
});
}
},
});
}
export default http;