繁体   English   中英

如何限制 API http 请求

[英]How to throttle API http request

我目前正在构建一个端点来处理大量数据。 但是,由于资源不足,我遇到了错误。 我很确定问题是我向服务器发出了太多请求而没有限制它。 然而,每一次试图扼杀它的尝试都没有成功。 所以我正在研究如何限制我的异步端点并避免这个问题。

  • 特定错误 net::ERR_INSUFFICIENT_RESOURCES

代码

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM