如何将Promise链合并为单个Promise?代码问题求助
解决Promise合并为单个Promise并返回合并结果的问题
你的代码问题在于循环中每次都重复执行Promise.all,且直接将Promise对象拼接到数组中,导致最终得到的是包含5个分页结果数组的Promise,而非合并后的100条数据。以下是修正后的实现:
修正后的代码
function xbox() { const gamesUrl = "https://api.rawg.io/api/games?key=f648fbbe7d024a9d9b021bbd24cea8b5"; const pagePromises = []; for (let i = 1; i <= 5; i++) { // 为每个分页创建一个Promise,最终返回该页的游戏数组 const pagePromise = fetch(`${gamesUrl}&page=${i}`) .then(res => res.json()) .then(data => data.results.map(e => ({ ID: e.id }))); pagePromises.push(pagePromise); } // 等待所有分页请求完成,再合并所有结果数组 return Promise.all(pagePromises).then(allPages => allPages.flat()); }
关键改动说明
- 统一收集所有分页请求的Promise:创建
pagePromises数组,在循环中把每个分页请求处理后的Promise存入其中,避免循环内重复处理Promise。 - 一次性等待所有Promise完成:循环结束后调用
Promise.all(pagePromises),确保所有分页请求都成功返回后再处理结果。 - 扁平化结果数组:通过
flat()方法将包含5个分页数组的二维数组转换为一维数组,得到100条合并后的游戏数据。
内容的提问来源于stack exchange,提问作者Luis Daniel Arciniegas Barco
相关产品推荐
相关产品推荐

