【问题标题】:How to make hundreds of get requests at the same time with axios如何用axios同时发出数百个get请求
【发布时间】:2020-07-24 14:25:01
【问题描述】:

我正在使用外部 API 制作一个 React 应用程序。但我面临一个小问题。我需要对我拥有的每个 ID 发出一个 GET 请求。我可能需要最多 1000 个 GET 请求,而问题在于获取所有数据所需的时间。有没有办法让我们说 1000 个 GET 请求而不等待每个请求解决?我有这个,但它需要永远。

for(const match of totalMatchesWithPremades){
    try {
        const matchStats: ISats = await axios.request<IMatchStats>({
          url: `https://API/match/${match.match_id}/stats`,
          method: 'get',
          headers: {
            accept: 'application/json',
            Authorization: `Bearer ${API_KEY}`,
          },
        });
        console.log(JSON.stringify(matchStats,null,2))
      } catch (err) {
        console.log(err);
      }
    }

【问题讨论】:

  • 如果您可以修改后端,您可以在 API 中添加一个新条目,在其中提供要获取的 ID 数组并让后端为您执行请求。如果您的后端使用 SQL 数据库,您还可以一次调用多个项目:SELECT * FROM table WHERE id IN array;
  • @HermitCrab 我不能这样做,因为 API 不是我的。我将使用 memoize 缓存响应,以便下次用户仅请求新 ID 并从缓存中获取其余部分。但至少在用户第一次使用应用时,根据他的 ID 数量,他需要全部请求
  • 是否绝对需要预先请求所有内容,或者您​​可以请求初始子集,然后根据需要使用一些按钮加载更多内容?由于 API 不支持,因此通过您的 React 应用程序提供伪造的批量读取/分页支持。
  • @AndrewNolan 这实际上是一个好主意,但它不适用于这种情况,因为我将使用数据来显示一些统计数据,例如点的平均值等。对于这些计算,我需要先获得所有数据,然后才能将其展示给用户

标签: reactjs typescript rest get axios


【解决方案1】:

您可能需要查看类似bulk API 的路由。所以例如可以设置match_ids的数组,只发出一次请求,就可以得到数组的数据。

否则你需要等待每个请求被执行。

【讨论】:

    【解决方案2】:

    我发现我可以像这样使用Promise.allSettled()

    
    Promise.allSettled(arr.map((match)=>{
    const matchStats: ISats = await axios.request<IMatchStats>({
              url: `https://API/match/${match.match_id}/stats`,
              method: 'get',
              headers: {
                accept: 'application/json',
                Authorization: `Bearer ${API_KEY}`,
              },
            });
            console.log(JSON.stringify(matchStats,null,2))
          } catch (err) {
            console.log(err);
          }
    })
    

    这将一个接一个地执行所有的 Promise 并返回一个数组,如果它们被填充或被拒​​绝。我在 5 秒内而不是 4 分钟内发出了 400 个请求

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2019-09-07
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-02-12
      • 2017-11-23
      • 1970-01-01
      • 2020-03-28
      相关资源
      最近更新 更多