如何避免nodejs循环上的429
Posted
技术标签:
【中文标题】如何避免nodejs循环上的429【英文标题】:How to avoid 429 on nodejs loop 【发布时间】:2021-07-23 16:47:48 【问题描述】:在 NODEJS 上工作。需要从 API 收集数据,执行 API 需要 Id 并响应结果。
const companies=[1,2,3,4,5,....1000];
for (let company of companies)
letdata =axios.get("API url"+company);
上面的代码运行完美,但一段时间后显示错误“Request failed with status code 429”
【问题讨论】:
429: Too Many Requests 如果它是您的 api,则实现单个公司查找或多个(发布数组) @Lawrence Cherone,是第三方API,他们没有批处理服务,需要一个一个去获取。 你的例子没有意义。axios.get
返回一个承诺。承诺没有 data
属性。 letdata =axios.get("API url"+company);
不起作用。
【参考方案1】:
使用async
/ await
您实际上向服务器发出了 1000 个并发请求。 axios
是异步的,因此返回一个承诺。这意味着它将发起请求,但不会“等待”(或阻止执行)服务器回答。
为避免 429“请求过多”错误,您可以在其他解决方案中等待一个请求完成,然后再启动下一个请求。您的代码可能如下所示:
(async ()=>
const companies=[1,2,3,4,5,....1000];
for (let company of companies)
letdata = await axios.get("API url"+company);
)();
其他说明:
从承诺中解构data
(在您的原始代码中)可能不正确。
具有async
函数的性质,当在没有await
的情况下(例如从常规函数)调用时,它将return
在第一个await
上作出承诺,并在数据到达时继续执行。李>
【讨论】:
应用第一种方法后, (async ()=> )(); 下没有执行任何操作什么都不执行以上是关于如何避免nodejs循环上的429的主要内容,如果未能解决你的问题,请参考以下文章