首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >请求之间的延迟-分页请求违反api速率限制节点js。

请求之间的延迟-分页请求违反api速率限制节点js。
EN

Stack Overflow用户
提问于 2022-03-01 11:39:34
回答 1查看 265关注 0票数 0

我在一个函数中有一个while循环,用于查询一个API web服务。循环处理来自API服务器的响应中的分页,这样函数就可以返回数据库中的所有条目。

我需要适应来自web服务的速率限制。最好的方法可能是在请求之间设置延迟。如何在此函数中处理分页的每个请求之间添加1000 in的延迟?

代码语言:javascript
运行
AI代码解释
复制
var db = new Discogs().database();


const getALL = async (id) => {

    let releases = [];
    let currentPage = 1;
    let totalPages = null

    while (totalPages === null || currentPage < totalPages) {
        
        let response = db.getArtistReleases(id);
        let results = await response;

        if (totalPages === null) {
            totalPages = parseInt(results.pagination.pages);
        }

        releases.push(results);
        currentPage++;

    }

    return Promise.all(releases);
}

我在应用程序的后端API调用中执行该函数

代码语言:javascript
运行
AI代码解释
复制
    const response = getAll(
        req.body.artistId
    );

    response.then(results => {
     
    })
    .catch((error) => {

    });
EN

回答 1

Stack Overflow用户

发布于 2022-03-02 17:29:04

为了适应api的速率限制,我在这个解决方案之后重写了处理分页和api库调用的函数

还添加了睡眠(Ms)函数,以便在接近速率限制时暂停执行给定的秒数。

代码语言:javascript
运行
AI代码解释
复制
    const getAll = async (id) => {
        return new Promise(resolve => {


            let mainReleases = []
            let perMinuteRateLimit = 60;
            let rateLimitThrottleSeconds = 4;
            let latestResults;


            db.getArtistReleases(id, {page: 1, per_page: 75}, (err, results, rateLimit)  => {
                if (err) {
                    console.log("Discogs API Error: " + err);
                }

                latestResults = results;
                mainReleases.push(latestResults.releases);

                async.whilst(
                    (cb) => cb(null, latestResults['pagination'].urls.next),
                    (iteration_cb) => {
                        var q = url.parse(latestResults['pagination'].urls.next, true);
                        
                        console.log("Discogs API - Artist Releases Query Page " + q.query['page'] + " of " + latestResults['pagination'].pages + "...");

                        db.getArtistReleases(id, {page : q.query['page']}, (err, res, rateLimit)  => {
         
                            latestResults = res;
                            mainReleases.push(latestResults.releases);


                            if (rateLimit['used'] > perMinuteRateLimit*0.9) {
                                sleep(rateLimitThrottleSeconds * 1000).then(() => {
                                    console.log("near Discogs API rate limit -- throttling requests\n" + JSON.stringify(rateLimit));
                                    iteration_cb(null, res);
                                });
                            } else {
                                iteration_cb(null, res);
                            }
                    });
                    
                    },
                    (err, results) => {
                        resolve(mainReleases);
                    }
                )
            });
        });
    };

    function sleep(ms) {
      return new Promise((resolve) => setTimeout(resolve, ms));
    }

排队看起来是一个很好的解决方案,但有了这个解决方案,我就能够快速获得所需的结果,而代价可能是可伸缩性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71313797

复制
相关文章
vue 分页请求
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
3200
去除限制 Post 请求大小限制
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161067.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/09
2.1K0
Yii2.0 RESTful API 之速率限制
权威指南翻译过来为限流,为防止滥用,你应该考虑对您的 API 限流。 例如,您可以限制每个用户 10 分钟内最多调用 API 100 次。 如果在规定的时间内接收了一个用户大量的请求,将返回响应状态代码 429 (这意味着过多的请求)。
hedeqiang
2019/12/17
7440
Nginx设置请求大小限制(文件上传请求大小)
将上面配置,添加到 Nginx 配置文件 nginx.conf 或者单独的配合文件中,要写在 server的外边即可
用户9006224
2022/12/21
16.8K0
Http请求URL长度限制[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172528.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/23
3.5K0
kubernetes之资源限制,请求
以下是一个LimitRange对象的配置文件。该配置指定了默认的内存请求与默认的内存限额。我们选择的是对limit-namespace空间里面的进行资源限制
张琳兮
2022/01/12
6150
nginx请求连接限制笔记
当时爬取时当并发过大的时候,请求就会出现卡死的情况。其实这可能就是珍爱网对请求和连接进行了限制。
我的小碗汤
2018/08/22
7210
nginx请求连接限制笔记
Postman TestScript 设置延迟请求时间
Postman是HTTP API测试工具,它有一个非常有用的功能,就是Run Collection。这能把将全部Collection中的Request都跑一遍,可以用来批量测试API。如下图所示:
风之泪
2020/02/16
3.6K0
如何开放自己的API接口给他人调用并限制请求次数?
可以帮助你实现:将自己的API接入到果创云,然后创建子应用给到你的客户或你的开发者进行接口调用,并统计调用次数。平台暂时不支持线上结算,需要自己进行线下接口调用次数的内部结算。
dogstar
2023/08/10
7520
译|通过Node和Redis进行API速率限制
速率限制可以保护和提高基于 API 的服务的可用性。如果你正在与一个 API 对话,并收到 HTTP 429 Too Many Requests 的响应状态码,说明你已经被速率限制了。这意味着你超出了给定时间内允许的请求数量。你需要做的就是放慢脚步,稍等片刻,然后再试一次。
张张
2020/09/18
2.1K0
译|通过Node和Redis进行API速率限制
js异步请求问题
首先想到的是,把promise存到数组,然后用Promise.all()把数据搞定
治电小白菜
2020/08/25
4K0
Ingress访问速率限制
在Kubernetes集群中,可以使用Ingress控制器实现对应用程序的HTTP/HTTPS路由。除了路由外,Ingress控制器还可以实现流量控制,例如限制访问速率。
玖叁叁
2023/05/05
1.9K0
3.2.2 请求分页管理方式
请求分页系统建立在基本分页系统基础之上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟存储器的方法。 在请求分页系统中,只要将当前需要的一部分页面装入内存,便可以启动作业运行。在作业执行过程中,当所要访问的页面不在内存时,再通过调页功能将其调入,同时还可以通过置换功能将暂时不用的页面换出到外存上,以便腾出内存空间。 为了实现请求分页,系统必须提供一定的硬件支持。除了需要一定容量的内存及外存的计算机系统,还需要有页表机制、缺页中断机构和地址变换机构。
week
2018/08/27
7020
前端 api 请求缓存方案
来源 | https://github.com/wsafight/personBlog/issues/2
winty
2020/11/06
1.1K0
前端 api 请求缓存方案
非定向可连接广播、扫描请求、扫描回复、连接请求之间的关系
可以看出,在从机广播(ADV_IND)的时候,主机发出扫描请求(SCAN_REQ),从机回复扫描回复(SCAN_RSP)。 主机(以手机为例)只有在收到扫描回复之后,才会在蓝牙列表显示从机。
ManInRoad
2021/09/15
1K0
非定向可连接广播、扫描请求、扫描回复、连接请求之间的关系
原生js发送post请求_javascript发送post请求
说明: 要测试restsharp的功能,首先需要了解http传参和下载上传文件的原理,请参考: c#:从http请求报文看http协议中参数传递的几种方式 c#使用Http上传下载文件
全栈程序员站长
2022/10/04
8.8K0
原生js发送post请求_javascript发送post请求
【Nginx25】Nginx学习:连接限制和请求限制
之前我们就已经学习过了一些和流量限制相关的配置指令,它们是 HTTP 核心配置中的内容
硬核项目经理
2023/09/18
1.4K0
【Nginx25】Nginx学习:连接限制和请求限制
限制POST参数个数_rest接口限制请求参数
网络编程都离不开Http的get/post请求。 get请求没有协议体,只有协议头,请求的参数是直接拼接在url的后面。 post有协议体也有协议头,参数值被解析成碎片存储在协议体中,获取是再按照相应的字符集还原参数值。 在传参的时候往往会遇到参数值的长度限制问题,下面详细来分享一下个人对最大限制问题的介绍及解决方案。
全栈程序员站长
2022/09/23
1.8K0
nginx如何限制并发连接请求数?
限制并发连接数的模块为:http_limit_conn_module,地址:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
Johnson木木
2020/09/07
1.2K0
Django(23)Django限制请求装饰器
有时候,我们想要限制访问的请求方法,比如我们希望用户只能通过get方式请求,post不允许,那么我们可以采用装饰器的方式,django已经为我们提供了内置的装饰器
全栈程序员站长
2022/09/16
7000

相似问题

限制Kedro API请求的速率

16

使用异步发出对游标分页api的速率限制请求

16

处理请求速率限制,MusicBrainz API

11

Instagram的私有API请求之间的速率限制是多少?

110

鉴权git API请求速率限制

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档