我使用mikeal/request来进行API调用.我最常用的API之一(Shopify API).最近发布了一个新的call limit,我看到了如下错误:

Exceeded 6.0 calls per second for api client. Slow your requests or contact support for higher limits.

我已经升级了,但不管我有多少带宽,我都必须对此负责.对Shopify API的大部分请求都在async.map()个函数内,这些函数循环异步请求并收集主体.

我正在寻找任何帮助,可能是一个已经存在的库,它将围绕请求模块,实际阻止、睡眠、调节、分配、管理许多异步启动的同时请求,并将它们限制为一次6个请求.如果这样一个项目不存在,我对它的工作没有问题.我只是不知道如何处理这种情况,我希望有某种标准.

我用mikeal/request英镑买了张票.

推荐答案

我在各种API中遇到了同样的问题.AWS也以节流而闻名.

可以使用几种方法.你提到了异步.map()函数.你试过async.queue()了吗?queue方法应该允许您设置一个固定的限制(如6),超过该限制的任何内容都将被放入队列中.

另一个有用的工具是oibackoff.如果服务器返回错误并重试,该库将允许您回退请求.

包装这两个库以确保两个库都被覆盖是很有用的:异步.排队以确保您不会超过限制,如果服务器告诉您有错误,则返回以确保您再次try 将请求输入.

Node.js相关问答推荐

MongoServelSelection错误:服务器 Select 在30000 ms后超时

Stripe webhook无法访问Express请求原始正文

Sveltekit停靠的应用程序找不到从Build导入的包

如何更改ejs中的镜像src,以防从OMDB API获取的某些镜像具有src=N/A

如何在ejs模板中使用循环显示多个结果?

Node.js分页返回空数组

未显示NPM版本

模块';"; node :流程&没有导出的成员';dlopen';

填充函数在Node.js和MongoDB中不起作用

通过PutObjectCommand上传AWS S3 PDF文件,结果为空PDF

车把模板引擎循环问题

node_modules/preact/src/jsx.d.ts:2145:22 - 错误 TS2304:找不到名称SVGSetElement

Next.js 在我的电脑上没有构建错误,但它们在使用 Vercel 部署时发生

为什么 req.params.id 返回 undefined未定义?

如何使用 Node.js 在服务器端管理多个 JS 文件

代理(如提琴手)可以与 Node.js 的 ClientRequest 一起使用吗

为什么模块级返回语句在 Node.js 中起作用?

nodejs - 如何读取和输出 jpg 图像?

名称类型为 mongoose 的字段

node.js 在控制台上显示未定义