如何并行调用fetchData并按Promise完成时间重排ids数组
解决方案
要实现按Promise完成耗时对ids排序,核心是给每个fetchData调用绑定对应的id和开始时间,待Promise完成后计算耗时,再基于耗时排序。具体实现如下:
const main = async () => { const ids = [1, 2, 3, 4, 5]; // 给每个id对应的请求包装,记录id和耗时 const timedPromises = ids.map(id => { const startTime = Date.now(); return fetchData(id).then(() => { const duration = Date.now() - startTime; return { id, duration }; }); }); // 等待所有请求完成,得到包含id和耗时的数组 const results = await Promise.all(timedPromises); // 按耗时从小到大排序,提取id得到最终排序后的数组 const sortedIds = results.sort((a, b) => a.duration - b.duration).map(item => item.id); console.log('按完成耗时排序后的ids:', sortedIds); }
代码说明
- 遍历
ids时,为每个请求记录开始时间startTime。 - 当
fetchData的Promise完成后,计算从开始到完成的耗时duration,并返回包含id和duration的对象。 - 用
Promise.all等待所有请求完成后,对结果数组按duration升序排序,最后提取id得到排序后的ids数组。
这样既保证了所有请求并行发起,又能准确跟踪每个id对应的请求耗时,从而完成排序需求。
内容的提问来源于stack exchange,提问作者Abobakr
相关产品推荐
相关产品推荐

