javascript - 不确定如何解决未决的 promise ?

标签 javascript ecmascript-6 async-await es6-promise map-function

我正在循环访问一些数据并获取单个导航项。

如果我在 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/

相关文章:

javascript - RequireJS 的例子有缺陷吗?

javascript - 为什么我可以等待此代码但不能使用 .then?

c# - Web API Controller 返回任务并不总是等待任务完成(puppeteer-sharp)

javascript - 在 angularjs 中创建容器指令

javascript - 通过 DOM 将文本添加到 JavaScript 中的现有文本元素

javascript - 如何制作嵌套列表?

javascript - Object.keys(anObject) 是否返回一个对象的原型(prototype)?

JavaScript : How to write Square bracket in array element

javascript - Rx (RxJS) 网址生成器

c# - 使用 C# 5.0 进行并行图像处理