在每次迭代中添加到对象,而无需替换

Add to object with every iteration without replacing

提问人:nb_nb_nb 提问时间:5/11/2023 最后编辑:nb_nb_nb 更新时间:5/11/2023 访问量:24

问:

我在函数之外有一个对象,我想在每次迭代中填充它,并在迭代完成后调用该对象,但我只能看到对象中的最后一个元素。如何添加到对象而不是替换对象?

我的代码:

let myobj = {};
const func1 = async (arg) => {
  let table_id = result.data.internal_id;
  const response = await axios_Func({ graphQL query });
  console.log(`${response.data.name} - ${table_id}`);
  myobj["name"] = response.data.name;
  myobj["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];
  prod_id.map((x) => createOne({ query: graphQL_query(x) });
  return Promise.all(prod_id.map((x) => func1({ query: graphQL_query(x) }));
});

const callback = () => console.log(myobj);

const execute = async () => {
  await func1()
  callback()
}

myobj返回对象中的最后一个元素,而不是它应该填充的 5 个元素。

如何让我的对象具有所有元素?

JavaScript 函数 对象 ECMASCRIPT-6 迭代

评论

0赞 Barmar 5/11/2023
如果希望对象属性包含多个值,则对象属性应为数组。或者创建一个对象数组而不是单个对象。
0赞 Barmar 5/11/2023
你说的是哪个循环?我没有看到任何更新的循环。myobj
0赞 nb_nb_nb 5/11/2023
@Barmar并相互调用,直到函数完成运行func1func2forEachfunc2
0赞 Barmar 5/11/2023
我看到在,但在哪里打电话?await func2func1func2func1
0赞 nb_nb_nb 5/11/2023
@Barmar,一旦结束,功能就会停止forEach

答:

1赞 Barmar 5/11/2023 #1

您需要一个数组来保存多个对象。

let myarray = [];
const func1 = async (arg) => {
  let table_id = result.data.internal_id;
  const response = await axios_Func({ graphQL query });
  console.log(`${response.data.name} - ${table_id}`);
  const myobj = {};
  myobj["name"] = response.data.name;
  myobj["id"] = table_id;
  myarray.push(myobj);
  await func2({ query: graphQL_query, table_id });
}