【发布时间】:2021-03-27 15:23:27
【问题描述】:
我正在遍历一些数据并获取单个导航项。
如果我在getNavItems 函数中的return 之前console.log(navItems),它会记录我期望的所有内容。
但是,如果我在返回 getFooterData 之前登录 footerData,我会在我的项目中返回一个未解决的承诺
[
{ heading: 'Heading 1', items: Promise { <pending> } },
{ heading: 'Heading 2', items: Promise { <pending> } },
{ heading: 'Heading 3', items: Promise { <pending> } },
]
我期待的更像是:
[
{ heading: 'Heading 1', items: [ {data: 1}, {data: 2}, {data: 3} ] },
]
const getNavitems = async (navItemList) => {
const navItemIds = navItemList.map(({ sys: { id } }) => id);
const navItemData = await Promise.all(
navItemIds.map((id) => client.getEntry(id))
);
const navItems = navItemData.map((item) => item.fields);
return navItems;
};
const getFooterData = async () => {
const footerDataCollection = await client.getEntry('abcxyz123');
const footerData = Object.entries(footerDataCollection.fields.sections).map(
(item) => {
return {
heading: item[1].fields.heading,
items: (() => getNavitems(item[1].fields.item_list))()
};
}
);
return footerData;
};
任何帮助都会很棒,因为我已经为此努力了好几个小时了!
【问题讨论】:
-
类似于您如何收集一系列承诺并等待它们为
navItemData完成,因此您也必须等待项目中的承诺。 -
你试过
(await client).getEntry('abcxyz123');吗?或(await (await client).json()).getEntry('abcxyz123'); -
可以试试
return await Promise.all(footerData); -
@KevinB 我在哪里需要这样做,对不起!我不确定我是否 100% 关注!
-
@StackSlave navItems 是一个只有 2 个字符串的对象数组。
[ { a: 'hello', b: 'world' } ]
标签: javascript ecmascript-6 async-await es6-promise map-function