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

React/React Native调用getUser接口返回Promise无法获取数据问题

问题原因

两个核心问题导致拿不到接口数据:

  • getUser 函数写法错误:你在函数内用await等待了fetch请求链,但没有把请求最终的结果return出去,函数执行完没有有效返回值,返回的Promise最终resolve值为undefined。
  • 调用方式错误:所有标记了async的函数,调用后会立刻返回一个处于pending状态的Promise对象,你直接打印getUser()的调用结果,没有等待Promise完成,自然拿不到实际的接口返回数据。
    另外你贴的User组件代码里漏了useEffect的导入,运行时会直接报错。
修复方案

第一步:修正getUser.js的请求逻辑

getUser.js是纯请求工具函数,不需要导入React,你代码里的import React from "react"可以直接删除。
两种正确请求写法二选一即可,不要混用async/await和.then链造成逻辑混乱:

// 写法1:直接返回Promise链,不需要额外套async
export const getUser = () => {
  return fetch("https://myapi.com")
    .then((response) => {
      // 加上请求状态判断,避免4xx/5xx错误没被捕获
      if (!response.ok) throw new Error(`请求错误:${response.status}`)
      return response.json()
    })
};
// 写法2:纯async/await写法,记得return最终结果
export const getUser = async () => {
  const response = await fetch("https://myapi.com")
  if (!response.ok) throw new Error(`请求错误:${response.status}`)
  return response.json()
};

第二步:修正组件内的调用逻辑

调用getUser时必须加await等待请求完成,同时建议把接口数据存入组件state用于渲染,加上加载态和错误捕获:

// 补全useEffect的导入
import React, { useState, useEffect } from 'react'
import { getUser } from './someplace/getUser'

export default function User() {
  const [userData, setUserData] = useState(null)
  const [loading, setLoading] = useState(false)
  const [errMsg, setErrMsg] = useState('')

  useEffect(()=>{
    getDataFromUser()
  },[])

  const getDataFromUser = async() => {
    setLoading(true)
    try {
      // 等待getUser请求完成,拿到实际返回数据
      const res = await getUser()
      console.log(res) // 此处打印的就是接口返回的真实数据
      setUserData(res)
    } catch (err) {
      setErrMsg(err.message)
    } finally {
      setLoading(false)
    }
  }

  // 渲染时处理加载、错误状态
  if (loading) return <div>数据加载中...</div>
  if (errMsg) return <div>加载失败:{errMsg}</div>
  if (!userData) return null

  return (
    <div className="user-container">
      {/* 在这里基于userData渲染内容即可 */}
    </div>
  )
}

OtherUser.js的调用逻辑和上述代码完全一致。如果不想两个组件重复发起相同请求,可以选择在共同父组件请求后通过props下发数据,或者接入全局状态管理(React Context、Redux、Zustand等)统一存储用户数据,一次请求供所有组件使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:36:20