You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中使用Axios调用API返回Promise pending问题求助

解决Next.js中Axios调用API返回Promise pending的问题

问题原因

所有async函数的返回值本质都是Promise,哪怕你在函数内部用了await处理异步操作,直接调用getCats()也只会拿到处于pending状态的Promise对象,不会直接获取到API返回的数据。你的代码里直接在组件渲染逻辑中调用console.log(getCats()),自然会输出pending的Promise。

解决方案

根据Next.js的不同渲染场景,有两种常用处理方式:

1. 客户端组件中异步获取数据(结合useEffect)

React组件的渲染函数不能是async函数,所以需要在useEffect钩子中创建异步函数并执行,同时用状态管理数据和错误:

import { useEffect, useState } from 'react';
import { getCats } from "./api/httpClient";

const Home = () => {
  const [catFact, setCatFact] = useState('');
  const [error, setError] = useState('');

  useEffect(() => {
    const fetchCatData = async () => {
      try {
        const response = await getCats();
        setCatFact(response.data.fact);
      } catch (err) {
        setError(err.message);
      }
    };

    fetchCatData();
  }, []);

  if (error) return <div>请求出错:{error}</div>;
  return <div>{catFact ? `猫咪冷知识:${catFact}` : '加载中...'}</div>;
};

export default Home;

2. 服务端预渲染获取数据(getServerSideProps/getStaticProps)

如果希望在服务端完成数据请求,再将数据传递给组件渲染,可以使用Next.js的服务端预渲染方法:

import { getCats } from "./api/httpClient";

const Home = ({ catFact, error }) => {
  if (error) return <div>请求出错:{error}</div>;
  return <div>猫咪冷知识:{catFact}</div>;
};

export async function getServerSideProps() {
  try {
    const response = await getCats();
    return {
      props: {
        catFact: response.data.fact,
        error: ''
      }
    };
  } catch (err) {
    return {
      props: {
        catFact: '',
        error: err.message
      }
    };
  }
}

export default Home;

补充说明

你的httpClient.js代码本身没有问题,async/await已经正确处理了Axios的异步请求,问题出在组件中调用异步函数的方式——没有等待Promise完成就直接输出,导致看到pending状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:20:31