如何在迭代中向外部对象追加元素而非覆盖,保留所有数据?
问题原因
你每次调用func1时,都直接覆盖myobj的name和id属性,普通对象的同名属性会被后续赋值完全覆盖,所以最终只保留最后一次迭代的结果。
修改方案
把myobj从普通对象改成数组(如果需要按顺序存储),或者用唯一键作为索引的对象,每次迭代时新增元素而非覆盖属性,同时确保所有异步操作完成后再打印结果。
修改后的代码(数组版,推荐)
// 改成数组存储多个元素 let myobj = []; const func1 = async (arg) => { // 注意:原代码中result未定义,需确保你已正确获取该变量 let table_id = result.data.internal_id; const response = await axios_Func({ /* 填入你的graphQL query */ }); console.log(`${response.data.name} - ${table_id}`); // 向数组中添加新对象,而非覆盖属性 myobj.push({ name: response.data.name, id: table_id }); await func2({ query: /* 填入你的graphQL_query */, table_id }); } const func2 = async (result, table_id) => { let dev = await getAllTables({ query: tables(123) }); let prod = await getAllTables({ query: tables(321) }); let prod_id = new Set(); result.data.data.table.table_fields.forEach((d) => { if (d.connector != null && !(d.name in dev)) prod_id.add(prod[d.name]["id"]); }); prod_id = [...prod_id]; // 修复原代码语法错误:补全map回调的闭合括号 await Promise.all(prod_id.map((x) => createOne({ query: /* 填入你的graphQL_query(x) */ }))); // 修复原代码语法错误:修正return语句的括号嵌套 return Promise.all(prod_id.map((x) => func1({ query: /* 填入你的graphQL_query(x) */ }))); }; const callback = () => console.log(myobj); const execute = async () => { await func1() callback() }
可选方案(对象键值版)
如果需要用唯一标识(比如table_id)作为索引存储,可将myobj改为对象,用唯一键避免覆盖:
let myobj = {}; // 在func1中修改赋值逻辑 myobj[table_id] = { name: response.data.name, id: table_id };
额外提示
原代码存在几处语法错误(比如map回调缺少闭合括号、参数传递逻辑模糊),修改时已标注,需你根据实际业务场景补全缺失的变量和查询内容。
内容的提问来源于stack exchange,提问作者nb_nb_nb
相关产品推荐
相关产品推荐

