在项目中,我们异步请求可能使用的评率非常高,特别是像遇到需要同时请求几十个接口的情况下,我们应该怎么避免请求一股脑儿的全部发送到服务器端,最终倒是服务压力巨大,这里我们就需要做节流,限制前端发送 请求数量,网上其实也有很多方案,但实际对代码的侵入太大,这里就不做过多描述,这里使用一种更为简单的方法,直接上代码:
定义同时发送请求的数量不超过5个,后进入的
let maxRequestCount = 5
let maxRequestInterval = 500
async throttleGet(url, data) {
return new Promise((resolve, reject)=> {
exec();
function exec(){
if(maxRequestCount > 0) {
maxRequestCount--;
httpRequest({
url: url,
method: "GET",
data: (data || {}),
dataType:"json",
takeToken: true,
headers:{
"Content-Type" : "application/x-www-form-urlencoded"
}
}).then(res => {
resolve(res)
}).catch(e => {
reject(e);
}).finally(() => {
//执行完以后将占用的请求数量归还
maxRequestCount++
});
}else{
//无可用的请求就过指定时间再尝试
setTimeout(function(){
exec()
}, maxRequestInterval)
}
}
});
}
没有帐号? 现在注册.