如何将循环fetch接口返回的多个数组合并为一个数组?
合并多个fetch返回的数组
你可以通过Promise.all(或Promise.allSettled)批量处理所有请求,再合并结果数组,具体实现如下:
基础实现(所有请求必须成功)
// 生成包含所有请求Promise的数组 const requestPromises = Array.from({ length: 150 }, (_, index) => { const url = `A valid URL ${index + 1}`; return fetch(url) .then(response => response.json()) .then(data => data.data.results); }); // 等待所有请求完成,合并数组 Promise.all(requestPromises) .then(allResultArrays => { // 使用flat()合并所有子数组 const mergedArray = allResultArrays.flat(); console.log(mergedArray); }) .catch(error => { console.error('请求过程中出现错误:', error); });
健壮性实现(允许部分请求失败)
如果担心个别请求失败导致整个流程中断,可以用Promise.allSettled过滤成功的结果再合并:
Promise.allSettled(Array.from({ length: 150 }, (_, index) => { const url = `A valid URL ${index + 1}`; return fetch(url) .then(response => response.json()) .then(data => data.data.results); })) .then(results => { const mergedArray = results .filter(item => item.status === 'fulfilled') // 只保留成功的请求结果 .map(item => item.value) .flat(); // 合并所有子数组 console.log(mergedArray); }) .catch(error => { console.error('处理结果时出错:', error); });
关键说明
Promise.all会等待所有请求成功完成,若任一请求失败则直接触发catchArray.from({ length: 150 })用来生成150个元素的数组,替代原有的for循环,写法更简洁flat()方法可以直接将二维数组展开为一维数组,也可以用[].concat(...allResultArrays)实现相同效果
内容的提问来源于stack exchange,提问作者daan
相关产品推荐
相关产品推荐

