我正在循环访问一些数据并获取单个导航项。
如果我在 getNavItems
函数中的 return
之前 console.log(navItems)
,它会记录我期望的一切。
但是,如果我在返回之前在 getFooterData
中记录 footerData
,返回时我会在项目中返回一个 Unresolved promise
[
{ 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;
};
任何帮助都会很棒,因为我已经为此苦苦思索了几个小时!
最佳答案
使用循环的解决方案。 (Array.prototype.map
对于 await
很棘手)
我还没有测试过这个,因为我没有办法去做。
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);
const items = await Promise.all(footerData.map(item => getNavitems(item[1].fields.item_list)));
for (let i = footerData.length; i--;) {
footerData[i] = {
heading: footerData[i][1].fields.heading,
items: items[i]
}
}
return footerData;
};
关于javascript - 不确定如何解决未决的 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65332196/