如何将getDealDetails查询结果的summary值追加到getAllData返回的Type-A对象中
实现方案
核心思路
- 先拉取
getAllData返回的全量原始数据,过滤出类型为Type-A的对象并收集对应ID - 根据接口限流规则选择并行/串行/批量方式调用
getDealDetails查询详情 - 建立ID与
summary值的映射关系,回写字段到原始数组的对应对象中
代码示例(JS/TS 环境)
async function processData() { // 1. 获取全量原始数据 const originalData = await getAllData(); // 2. 筛选Type-A类型的条目,收集需要查询详情的ID const typeAItems = originalData.filter(item => item.Type === 'Type-A'); // 3. 批量请求详情,这里用Promise.all做并行请求,高并发场景可加限流逻辑 const detailResults = await Promise.all( typeAItems.map(async item => { try { const detail = await getDealDetails(item.id); // 匹配到有效结果则返回summary,否则返回默认值(可按业务调整) return detail?.TypeValues?.summary ?? null; } catch (err) { console.error(`ID为${item.id}的详情查询失败:`, err); return null; } }) ); // 4. 建立ID与summary的映射表 const summaryMap = new Map(); typeAItems.forEach((item, index) => { summaryMap.set(item.id, detailResults[index]); }); // 5. 追加dataValue字段到原始对象 const finalResult = originalData.map(item => { if (item.Type !== 'Type-A') return item; return { ...item, dataValue: summaryMap.get(item.id) }; }); return finalResult; } // 调用方法 processData().then(res => console.log('处理完成的结果:', res));
优化说明
- 如果
getDealDetails支持批量传入ID,优先用批量请求减少HTTP请求开销 - 若
Type-A类型的条目数量超过接口限流阈值,可引入p-limit等工具做并发控制 - 可根据业务需要调整无匹配结果/接口报错时
dataValue的默认值,比如设为空字符串、直接省略该字段等
内容的提问来源于stack exchange,提问作者Amar Allia
相关产品推荐
相关产品推荐

