如何优化从分页API拉取数据的现有JavaScript代码?
优化方案
你的需求是并发拉取全部分页、收集所有成功返回的数据、所有请求结束后统一返回结果,用Promise.allSettled可以完全替代你手动维护请求状态、判断结束时机的冗余逻辑,优化后代码如下:
async function myFunc () { const totalPages = await getTotalPages() // 生成所有分页的请求Promise数组 const requestList = Array.from({length: totalPages}, (_, pageNum) => getPage(pageNum)) // 等待所有请求结束(无论成功失败) const requestResults = await Promise.allSettled(requestList) const allPages = [] requestResults.forEach((result, pageNum) => { if (result.status === 'fulfilled') { allPages.push(...result.value) } else { console.log(pageNum, result.reason) } }) return { all_pages: allPages } }
优化说明
- 完全去掉了手写Promise封装、手动维护完成/失败计数、重复判断结束条件的冗余代码,逻辑直观易读
- 并发请求效率和原有实现完全一致,没有额外性能损耗
- 后续如果要加失败页重试逻辑也非常方便,只需要筛选出失败的页码重新发起请求即可
内容的提问来源于stack exchange,提问作者Cloud
相关产品推荐
相关产品推荐

