You need to enable JavaScript to run this app. Next.js getStaticProps调用独立服务时出现Promise无法JSON序列化报错
优惠活动
大模型
产品
解决方案
定价
更多

Next.js getStaticProps调用独立服务时出现Promise无法JSON序列化报错

getStaticProps 抽离请求逻辑后props序列化报错排查

报错完整信息:
Error: 根路由"/"中getStaticProps方法返回的.b属性值无法完成序列化。
报错触发逻辑:传入的[object Promise]类型对象不支持JSON序列化,仅允许返回可进行JSON序列化的数据类型。

触发场景

  • 原本在getStaticProps内部直接编写fetch请求逻辑时,页面功能可正常运行
  • 为了减少代码冗余,尝试将所有fetch请求逻辑统一抽离到独立JS文件的WordpressService方法中
  • 完成逻辑抽离、调用服务方法获取WordPress页面数据传入页面props时,触发上述序列化报错

问题根因

WordpressService.getPageByIdTest本身是带async标识的异步函数,调用异步函数时如果不等待Promise状态变更,拿到的返回值本身就是一个Promise实例,而非接口返回的纯数据。
原代码中给变量b赋值的步骤没有加await,最终传入props的是未完成resolve的Promise对象——而getStaticProps明确要求,props字段的所有值必须是可直接JSON序列化的纯JS数据类型,不能传入函数、Promise、类实例这类非可序列化对象,因此触发序列化报错。

修正方案

在调用异步的getPageByIdTest方法时,补全await关键字,等待异步请求完成、拿到真实的接口返回数据后,再将数据传入props。

修正后的核心代码

export async function getStaticProps() {
  // 补全await,等待异步服务方法返回真实数据
  let b = await WordpressService.getPageByIdTest(50);
  return {
    props: {
      b: b,
    }, 
    revalidate: 30     
  }
}

const WordpressService = {
  async getPageByIdTest(id) {
      const resIndexPage = await fetch(`${url}pages/${id}`);
      const indexPageData = await resIndexPage.json();
      return indexPageData;
  }
}

内容的提问来源于stack exchange,提问作者ashley g

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 11:24:03