【问题标题】:Nested Array of object need to convert to array object with async/await with two loop对象的嵌套数组需要通过两个循环使用 async/await 转换为数组对象
【发布时间】:2021-07-24 02:43:59
【问题描述】:

可能的问题是看起来像重复,但我的情况不同。因为我已经实现了相同的解决方案,但它正在工作同步循环,但我想实现异步循环。我无法实现它。

同步循环解决方案:

输入数据来自 API。

let input = [  
   {  
      "id":1,
      "domain":"bank",
      "projects":[  
         {  
            "id":1,
            "name":"home loan",
            "amount":["123","345","45"]
         },
         {  
            "id":2,
            "name":"car load",
            "amount":["123","34","45"]
         }
      ]
   },
   {  
      "id": 2,
      "domain":"game",
      "projects":[  
         {  
            "id":3,
            "name":"cricket",
            "amount":["13","4","45"]
         },
         {  
            "id":4,
            "name":"Kabadi",
            "amount":["3","4","5"]
         }
      ]
   }
];





const transformation = data => {
  let counter = 0;
  let domainProjects = [];
  for (let index = 0; index < data.length; index++) {
    let len = data[index].projects;
    for (let j = 0; j < len.length; j++) {
      domainProjects[counter] = {
        domain: data[index].domain,
        project: len[j].name,
        amount: len[j].amount,
      };
      counter++;
    }
  }
  return domainProjects;
};
const result = transformation(input);
console.log("Result:",result);

异步循环 预期结果:

  expectResult =[
    {
        "domain":"bank",
        "name":"home loan",
        "amount":["123","345","45"]
    },
    {
        "domain":"bank",
        "name":"car load",
        "amount":["123","34","45"]
    },
    {
        "domain":"game",
        "name":"cricket",
        "amount":["13","4","45"]
    },
    {
        "domain":"game",
        "name":"Kabadi",
        "amount":["3","4","5"]
    }
];

【问题讨论】:

  • 您目前在制作异步循环方面做了哪些尝试?
  • 你到底想做什么?你的数据来源在哪里?为什么你认为你需要一个异步循环?
  • 为什么需要异步循环?
  • 在您的代码中,所需的数据已经被获取,那么什么是异步的?
  • @PramodKharade 如果您的代码中没有发生任何异步,则不能使其异步。你似乎没有异步的目标,没有问题要解决,保持同步!

标签: javascript json async-await promise es6-promise


【解决方案1】:

这是未经测试的,不能保证有效,但它绝对是一般基础,你应该可以从这里得到它。为了异步执行循环,它必须包含 async 和 await 语句。

const transformation = async () => {
    let counter = 0;
    let domainProjects = [];
    return new Promise((resolve, reject) => {
        for (let index = 0; index < data.length; index++) {
            let len = data[index].projects;
            for (let j = 0; j < len.length; j++) {
                domainProjects[counter] = {
                domain: data[index].domain,
                project: len[j].name,
                amount: len[j].amount,
            };
            counter++;
        }
        resolve(domainProjects);
    });
}

const result = transformation(input).then((v) => console.log(v));

【讨论】:

  • 你真的在这里async吗?该函数返回一个Promise,而您没有使用await,所以我认为不需要它。此外,您不会在任何地方定义datadata 需要是 transformation 函数的参数。
  • 另外,请注意 result 将是 Promise 而不是输出数组 (domainProjects)。
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
相关资源
最近更新 更多