const BASE_URL = config.baseUrl;
// 同时发送异步代码的次数,防止一次点击中有多次请求,用于处理
let ajaxTimes = 0;
let reqId = 0;
// 封装请求方法,并向外暴露该方法
export const myHttp = (options) => {
// 解构请求头参数
let header = {
...options.header
};
ajaxTimes++;
if (!options.loading) {
// 显示加载中 效果
uni.showLoading({
title: "加载中",
mask: true,
});
}
//解决请求竞态问题
let currentRequestId = 0
if (options.cancelReq) {
currentRequestId = ++reqId;
}
return new Promise((resolve, reject) => {
uni.request({
url: BASE_URL + options.url,
timeout: 10000, // 设置超时时间为5秒
method: options.method || 'POST',
data: options.data || {},
header,
success: (res) => {
if ((options.cancelReq && currentRequestId != reqId){
return;
}
resolve(res);
},
fail: (err) => {
if ((options.cancelReq && currentRequestId != reqId) || (options.cancelUser &&
cancelUserRequestId != cancelUserId)) {
return;
}
youfa_toast("网络异常")
reject(err);
},
// 完成之后关闭加载效果
complete: () => {
ajaxTimes--;
if (ajaxTimes === 0) {
// 关闭正在等待的图标
uni.hideLoading();
}
}
});
});
};
请求竞态问题,并发控制,限制请求数量
于 2023-02-17 13:50:46 首次发布