首页 > 解决方案 > 所有请求一一返回,不并发

问题描述

你能帮我写代码吗?我需要同时运行请求,但要一一获取请求。下面的代码示例(使用 VueJS 方法/函数)

async manageData() {
   // array of chart's properties
   const charts = await axios.post('/report/chart_data', {id: this.id);
   // concurrent requests with variable 'charts'
   const result = await Promise.all(
      charts.map((chart, key) => axios.post('/report/data_range', {id: key}))
   );
}

在此处输入图像描述

标签: javascriptvue.jsasync-await

解决方案


   const charts = await axios.post('/report/chart_data', {id: this.id);

将发出一个请求并等到它完成后再继续。这是必要的,因为您随后会使用charts响应来形成后续请求。

      charts.map((chart, key) => axios.post('/report/data_range', {id: key}))

charts.length并行发出多个请求。根据您的描述,这是可取的,因为看起来请求是独立的。

您的屏幕截图支持此分析(第一个请求在并行发出后续请求之前等待响应)。

如果您知道响应的长度,则charts可以并行化第一个和后续请求,因为您只使用key(index) 而不是实际chart的 s 来执行后面的请求。

如果您担心为什么您的后一个请求似乎需要稳定增加的时间来响应,那可能只是每个请求的复杂性的巧合,或者正如用户 ctt@ 在评论中指出的那样,可能表明您的后端没有处理请求同时。但这似乎不是您关心的问题(根据您的评论)。


推荐阅读