gpt4 book ai didi

javascript - 带有请求 promise 的 Node.js API 请求限制

转载 作者:行者123 更新时间:2023-11-30 11:55:46 24 4
gpt4 key购买 nike

我正在尝试从我的 node.js 应用程序访问 REST API 端点,如下所示:

var people = [];
for(var i=0; i<n; i++) {
//create person
people.push(person);
}
return Promise.all(people.map(create3APIRequestPromises));

其中 create3APIRequestPromises 大致如下:

// APIRequestPromise = require('request-promise')(options);
return Promise.all([APIRequestPromise1, APIRequestPromise2, APIRequestPromise3]);

代码对少数人来说都可以正常工作,但如果我增加太多,它就会开始失败。我相信此失败是由提供 REST API 的服务限制我的使用引起的。所以,我的问题是什么是限制我发送的请求数量的最佳方法,比如每秒 10 个。

我读过有关 Node 速率限制器的信息,但我看不出它如何符合我在上面使用“请求 promise ”编写的 promise (也许这个模块不可能,所以也许你可以提出替代方案)。

谢谢。

最佳答案

我认为在您的情况下,最好在发出请求之间使用简单的时间间隔。为此,您应该将请求分成多个系列,并在每组前面加上延迟。我意识到example .用法是:

// Create timepad function
let timePad = createTimePad(5, 10e3); // 5 requests each 10 seconds

// Iterate over people
return Promise.all(
people.map(
(human) => timePad().then(() => create3APIRequestPromises(human))
)
);

创建时间垫的函数:

// Create timepad function where timeout is timeout between calls and series is the maximum
// number of calls that will be done simultaneously
function createTimePad(series = 10, timeout = 1000) {
let seriesCounter = series;
let delay = timeout;

return () => {
return new Promise((resolve) => {
if (seriesCounter < 1) {
delay += timeout;
seriesCounter = series;
}

setTimeout(resolve, delay);

seriesCounter -= 1;
});
};
}

这非常简单,可以根据您的意愿将请求分成大小可变的组。

关于javascript - 带有请求 promise 的 Node.js API 请求限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38048829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com