JavaScript中如何处理多个异步API请求,同时保证最终输出的顺序?

问题描述 投票:0回答:1

我正在开发一个 JavaScript 项目,需要从多个 API 异步获取数据。由于每个 API 调用需要不同的时间,我想确保最终的输出数组保持与原始 API 请求序列相同的顺序。

问题:

  • 我需要并行进行多个异步 API 调用以提高性能。
  • 结果必须以与请求相同的顺序出现,即使每个 API 需要不同的时间来响应。

例如,如果我按以下顺序向三个 API 请求数据:

const urls = ['api/1', 'api/2', 'api/3'];

即使 api/2 可能先于 api/1 完成,最终输出的结果仍应按顺序:

['result from api/1', 'result from api/2', 'result from api/3']

我尝试使用

Promise.all()
来获取数据:

const urls = ['api/1', 'api/2', 'api/3'];

const fetchData = async () => {
  const promises = urls.map(url => fetch(url).then(response => response.json()));
  const results = await Promise.all(promises);
  console.log(results);  // Results may come in a different order
};

fetchData();

这适用于并行执行,但结果的顺序可能与 URL 的顺序不匹配,因为

Promise.all()
在完成时解析它们,无论顺序如何。

我希望输出与请求顺序匹配,即使请求在不同时间完成。

javascript asynchronous async-await promise fetch-api
1个回答
0
投票

我认为代码按预期工作,因为无论每个 Promise 花费的时间如何,promise.all 都会按照与输入相同的顺序返回结果

© www.soinside.com 2019 - 2024. All rights reserved.