提问者:小点点

promise.all在与Async/Await一起使用时仅返回已解析的promise


我正在尝试用Async/Await进行一些动态数据建模。我有两个endpoint,第一个将返回对象数组。数组中的这些实体具有从另一个endpoint获取的子实体。

所以我试图实现的结果类似于:

[{
  root: {
    id: 'root1'
  },
  children: [
    {
      id: 'child1'
    }, 
    {
      id: 'child2'
    }, 
  ]
}]

这就是我试图解决这个问题的方法:

  let data = await rootLevel();
  let levelOneData = [];
  levelOneData = data.map((e) => {
    let rootNode = {};
    rootNode["root"] = e;
    return rootNode;
  });

  let levelTwoData = await Promise.all(
    levelOneData.map(async (e) => {
      let response = await fetch(
        `APIURL{e.parent.ID}`
      );
      let responseJSON = response.json();
      e["children"] = responseJSON;
      return e;
    })
  );

  const rootLevel = async () => {
    let response = await fetch(
      `APIURL`
    );
    return response.json();
  };

我所期待的:

children: {Array(26)}

我得到的是:

children: Promise {<resolved>: Array(26)}

我不知何故监督了我的承诺.所有链,所以我只是在我的数据对象中获得解析的承诺,有没有关于如何在其中获得普通数据的提示?或者如何将一个数组解析的承诺变为实际数据?


共1个答案

匿名用户

更改此:

let responseJSON = response.json();

对此:

let responseJSON = await response.json();

response.json()是异步的,并返回一个承诺。你只是把这个承诺放在你的结果中,而不是等待它。