[英]How to throttle API http request
我目前正在构建一个端点来处理大量数据。 但是,由于资源不足,我遇到了错误。 我很确定问题是我向服务器发出了太多请求而没有限制它。 然而,每一次试图扼杀它的尝试都没有成功。 所以我正在研究如何限制我的异步端点并避免这个问题。
代码
const sendStepData = async() =>{
try{
const body = {a,b,c,d,e,f}
assignToBody(body)
const response = await fetch('http://localhost:5000/stepdata',{
method:"POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify(body)
})}catch(err){
console.log(err.message)
}
}
即使添加了 SetTimeOut,我也无法限制端点。
超时代码
const sendStepData = async() =>{
try{
const body = {a,b,c,d,e,f}
assignToBody(body)
const response = await fetch('http://localhost:5000/stepdata',{
method:"POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify(body)
})}catch(err){
console.log(err.message)
}
}
const delayQue = () =>{
setTimeout(sendStepData,5000)
}
还要澄清一件事,这可能会有所帮助。 此端点位于一个单独的文件中,在我准备好要传递到我的数据库的数据后调用该文件。
我什至会在材料上提出建议,看看它是否有帮助。 感谢您的时间。
你需要去抖动你的方法:
let now = Date.now();
const delayQue = () =>{
if(Date.now() - now > 5000) {
now = Date.now();
sendStepData()
}
}
它只会在自上次调用后 5000 毫秒后才进行调用,并且在第一次调用之前它也会等待 5000 毫秒。
您也可以等待5000ms过去并调用该方法
let now = Date.now();
let timeoutId = null;
const delayQue = () =>{
if(Date.now() - now > 5000) {
now = Date.now();
sendStepData()
} else if(!timeoutId) {
timeoutId = setTimeout(() => {
now = Date.now();
sendStepData();
timeoutId = null,
}, 5000 - (Date.now() - now))
}
}
如果你不想自己做,你也可以寻找 lodash debounce 方法,并有一个更完整的解决方案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.