等待所有异步请求在循环内完成[重复]

Posted

技术标签:

【中文标题】等待所有异步请求在循环内完成[重复]【英文标题】:await for all of the async request to finish inside loop [duplicate] 【发布时间】:2018-10-20 01:54:51 【问题描述】:

我需要将所有结果推送到一个进行异步 http 调用的数组中,但我需要等到所有调用都完成。

async function()
  const arrayWithResults = [];
  const urls = ['someurl.com', 'otherurl.com'];
  urls.map( url => 
    axios.get(url).then( result => 
      arrayWithResults.push(result);
    
  );

在这里使用 await 是唯一的选择吗?我害怕使用它,因为等待每个请求会减慢整个过程。

【问题讨论】:

但这里可能会有更好的答案:***.com/questions/37576685/… 【参考方案1】:

await 的返回值改为Promise.all

const arrayWithResults = await Promise.all(
  urls.map(url => axios.get(url))
);

Promise.all 返回一个 Promise,一旦传递给它的所有 Promise 都解决,该 Promise 就会解决。

【讨论】:

以上是关于等待所有异步请求在循环内完成[重复]的主要内容,如果未能解决你的问题,请参考以下文章

巨坑:浏览器在短时间内对于同一个请求的处理,会先等待上一个请求完成后,再处理下一个请求,导致在测试异步时误导代码有问题。

同步请求和异步请求区别

tornado异步web请求

在循环中执行异步XMLHttpRequests,并在所有请求完成后继续

如何使异步请求Swift 5的for循环停止

循环阻止异步请求被发送。为什么以及如何解决?