我正在开发一个 JavaScript 项目,需要从多个 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()
在完成时解析它们,无论顺序如何。
我希望输出与请求顺序匹配,即使请求在不同时间完成。
我认为代码按预期工作,因为无论每个 Promise 花费的时间如何,promise.all 都会按照与输入相同的顺序返回结果