简体   繁体   English

请求失败,状态码为 429 Axios

[英]Request failed with status code 429 Axios

I am trying to parse lots of data from external API endpoint to my Database, I keep getting error 429.我正在尝试将大量数据从外部 API 端点解析到我的数据库,我不断收到错误 429。

I've tried timeout and sleep lib but it doesn't work for some reason.我已经尝试过超时和睡眠库,但由于某种原因它不起作用。

Here is the code:这是代码:

async function(req, res) {
    console.log("usa sam");
    try {
        let count = await Subjekti.estimatedDocumentCount();
        let response = await axios.get(`x.com/?offset=${count}&limit=5000`, {
            timeout: 5800,
            headers: {
                "Key": "x"
            }
        });
        const subjects = response.data;
        for (let subject of subjects) {
            let companyDetails = await axios.get(`https://x.com=${subject.mbs}&expand_relations=true`, {
                headers: {
                    "Key": "x"
                }
            });
            await Subjekti({
                mbs: subject.mbs,
                sud_id_nadlezan: subject.sud_id_nadlezan,
                sud_id_sluzba: subject.sud_id_sluzba,
                oib: subject.oib,
                ino_podruznica: subject.ino_podruznica,
                stecajna_masa: subject.stecajna_masa,
                datum_osnivanja: subject.datum_osnivanja,
                postupak: subject.postupak,
                likvidacijska_masa: subject.likvidacijska_masa,
                skracene_tvrtke: companyDetails.data.skracene_tvrtke && companyDetails.data.skracene_tvrtke.length > 0 ? companyDetails.data.skracene_tvrtke[0].ime : null,
                ulica: companyDetails.data.sjedista && companyDetails.data.sjedista.length > 0 ? companyDetails.data.sjedista[0].ulica : null,
                kucni_broj: companyDetails.data.sjedista && companyDetails.data.sjedista.length > 0 ? companyDetails.data.sjedista[0].kucni_broj : null,
                naziv_naselja: companyDetails.data.sjedista && companyDetails.data.sjedista.length > 0 ? companyDetails.data.sjedista[0].naziv_naselja : null,
                naziv_zupanije: companyDetails.data.sjedista && companyDetails.data.sjedista.length > 0 ? companyDetails.data.sjedista[0].naziv_zupanije : null,
            }).save();
            console.log("spremija i cekam");

        }
    } catch (err) {
        //Baci error 500...
        return apiResponse.ErrorResponse(res, err);
    }
}

Looking forward to your reply.期待你的答复。

You are sending too many requests, and you get ratelimited.您发送的请求太多,并且您会受到速率限制。

You should change your logic to allow more data to be sent and retrieved with a single request, or delaying most part of your requests to a later stage.您应该更改逻辑以允许通过单个请求发送和检索更多数据,或者将大部分请求延迟到稍后阶段。

To delay request using axios interceptors, take a look here:要使用 axios 拦截器延迟请求,请看这里:

https://stackoverflow.com/a/52258937/7629020 https://stackoverflow.com/a/52258937/7629020

Ive found out solution:我找到了解决方案:

await new Promise(resolve => setTimeout(resolve, 5000));等待新的承诺(解决=> setTimeout(解决,5000));

Hope it helps someone and save you time.希望它可以帮助某人并节省您的时间。

Try using debounce approach in this case to avoid sending too many requests.在这种情况下尝试使用 debounce 方法来避免发送过多的请求。

see an example here: https://www.freecodecamp.org/news/javascript-debounce-example/在此处查看示例: https://www.freecodecamp.org/news/javascript-debounce-example/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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