如何使用axios同时发出数百个get请求

时间:2020-04-11 21:33:40

标签: reactjs typescript rest get axios

我正在使用外部API编写React应用程序。但是我面对atm的一个小问题。我需要对我拥有的每个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);
      }
    }

2 个答案:

答案 0 :(得分:0)

可能您需要检出类似bulk的API路由。所以您可以设置match_id数组,仅发出一个请求并获取数据数组。

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

答案 1 :(得分:0)

我发现我可以像这样使用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);
      }
})

这将一个接一个地执行所有Promises,并在它们被满或拒绝时返回一个数组。我在5秒内4分钟内提出了400个请求