gpt4 book ai didi

javascript - 速率限制/ sleep /延迟nodejs而不忙等待

转载 作者:行者123 更新时间:2023-12-05 07:01:19 29 4
gpt4 key购买 nike

我希望在发出 http 请求时设置延迟,以避免超过外部服务器的速率限制。

users.forEach(async function(user) {
await rate_check()
make_http_request()
})

我需要帮助以避免忙等待的方式实现 rate_check 函数。此刻正忙着等待如下

async function rate_check() {
if(rate_counter < rate_limit)
rate_counter += 1
else {
// Busy wait
while(new Date() - rate_0_time < 1000) {}
rate_counter = 1
time_delta = new Date() - rate_0_time
rate_1_time = new Date()
}
}

await new Promise(resolve => { setTimeout(resolve, 2000)})不起作用,因为它只会导致 rate_check 休眠,但匿名函数会继续发出请求。

任何速率检查代码都必须在 rate_check 函数中完成,而不是在 http 请求发生的函数中完成,因为请求发生在多个异步函数之间,并且它们正在向同一服务器发出请求。

我愿意接受任何其他建议以及重构,只要它避免嵌套回调或第三方依赖

最佳答案

您可以使用 lodash throttle 函数 https://lodash.com/docs/4.17.15#throttle环绕你的副作用函数。它最多每个间隔调用一次并记住最后返回的结果(因此您可能希望返回数据而不是有状态的对象,例如 http 主体)。

关于javascript - 速率限制/ sleep /延迟nodejs而不忙等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63901248/

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