next.js 使用fetch/await函数在循环内创建对象

rpppsulh  于 2023-01-17  发布在  其他
关注(0)|答案(3)|浏览(214)

我正在尝试为我的NEXTJS项目构建一个对象,它遍历所有的域和它们的页面,然后构建一个包含站点名称和页面URL的对象。这是我在getStaticPaths函数中的动态分页。
现在它对我不起作用了,在我的理解中,我正在以正确的方式做这件事。但似乎我错过了一些东西。我已经在谷歌上搜索了一段时间,但没有什么真正解决和匹配我在这一点上面临的问题。
我现在有下面的代码
下面是我现在拥有的代码

const pages = async () => {
  const allPages = data.map(async ({ params }) => {
    const site = params.site
    const siteInfo = await getSiteInfo(site as string)
    if (typeof siteInfo !== typeof undefined) {
      const siteId = siteInfo[0].site_id
      const allPages = await getPages(site, siteId)
      return allPages.map((pages) => {
        return {
          params: {
            site: params.site,
            slug: pages.page_url,
          },
        }
      })
    }
  })

  return allPages
}

const paths = pages()

console.log(paths)

然后console.log将显示下一个输出

[ Promise { <pending> }, Promise { <pending> } ]

我一直在尝试用pages.then(result)捕捉响应,然后记录结果,但这也没有做任何事情。
我期待的回应是这样的每一页。

params: {
    site: test website,
    slug: 'contact',
  },
xwmevbvl

xwmevbvl1#

pages函数是async,但是:
1.它不执行任何异步操作,只是返回一个Promises数组
1.反正你也不是在等
您可以在函数中await Promises数组:

const allPages = data.map(async ({ params }) => {
  //...
});

return await Promise.all(allPages);

然后等待调用该函数:

const paths = await pages();
console.log(paths);

或者用回调来跟进:

pages().then(paths => console.log(paths));
tjrkku2a

tjrkku2a2#

我觉得

const pages = async () => {
  const allPages = await Promise.all(data.map(async ({ params }) => {

我应该做的伎俩(等待Promise. all等待数组中的所有承诺完成,并返回数组与他们的结果)

t3psigkw

t3psigkw3#

您可以使用Promise.all来使用一个承诺数组,请尝试以下操作:

const result = Promise.all(paths)

相关问题