【问题标题】:How to send batch axios GET requests by iterating +1如何通过迭代+1发送批量axios GET请求
【发布时间】:2021-09-20 02:17:11
【问题描述】:

如何使用 Axios 发送批量 HTTP GET 请求,例如:

let maxI = 3000;
let i = 0;
do{
i = i + 1 ;
  await exampleUrl = axios.get(`https://hellowWorld.com/${i}`);
} while (i < maxI);

我如何能够从所有提供的 URL 接收数据,并且可以将这些数据合并到一个变量中吗?以及如何确保快速执行?

我知道 axios.all,但我不知道如何在我的情况下应用它。

提前谢谢你。

【问题讨论】:

    标签: javascript node.js ecmascript-6 axios


    【解决方案1】:

    您可以这样做,但要小心,如果您批量发出请求以防止 DDOS,服务器将拒绝您的请求,这也不能保证所有请求都会成功返回并且您会收到所有数据,这里是它的sn-p:

    import axios from "axios";
    
    const URL = "https://randomuser.me/api/?results=";
    
    async function getData() {
      const requests = [];
    
      for (let i = 1; i < 6; i++) {
        requests.push(axios.get(URL + i));
      }
    
      const responses = await Promise.allSettled(requests);
      console.log(responses);
      const result = [];
      responses.forEach((item) => {
        if (item.status === "rejected") return;
        result.push(item.value.data.results);
      });
      console.log(result.flat());
    }
    
    getData();
    

    AFAIK,不可能提高速度/减少完成批处理请求所需的时间,除非您在服务器上实现批处理请求处理 API,这将减少服务器处理的请求数量和由服务器发出的请求数量浏览器。我给你的解决方案只是为了演示如何从客户端完成,但你的方法不是最佳方式。

    对于不同浏览器可以向单个域发出的并行请求数量存在不同的限制,因此我们无法减少执行查询所需的时间。

    请通读这些资源以获取更多信息,它们会很有帮助:

    1. Bulk Requests Implementation
    2. Browser batch request ajax
    3. Browser request limits
    4. Limit solution

    【讨论】:

    • 谢谢,我尝试了您的代码,该代码在 50 个请求中运行良好,但每当我尝试使用 500 多个请求时,它处理请求的速度都非常慢。我要与之通信的 API URI 端点能够处理大量请求,因此我需要它一次至少处理 10.000 个请求。
    • 我已经更新了可能的解决方案和解释的答案
    猜你喜欢
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2019-10-21
    • 2021-02-12
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多