我正在尝试用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)}
我不知何故监督了我的承诺.所有链,所以我只是在我的数据对象中获得解析的承诺,有没有关于如何在其中获得普通数据的提示?或者如何将一个数组解析的承诺变为实际数据?
更改此:
let responseJSON = response.json();
对此:
let responseJSON = await response.json();
response.json()
是异步的,并返回一个承诺。你只是把这个承诺放在你的结果中,而不是等待它。