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

React+TypeScript调用API获取对象数组却返回Promise问题求助

问题原因

所有标记async的函数返回值都会自动包装为Promise类型,你直接调用fetchLikes()拿到的是Promise实例而非接口返回的实际数据,必须通过await或者.then()方法才能拿到解析后的对象数组。

解决方案

1. 普通TS环境调用

两种常用写法:

// 写法1:async立即执行函数包裹await
(async () => {
  const likesData = await fetchLikes()
  console.log('实际返回数据:', likesData)
})()

// 写法2:.then链式调用
fetchLikes()
  .then(likesData => console.log('实际返回数据:', likesData))
  .catch(err => console.error('接口请求失败:', err))

2. React函数组件内调用

在React中通常配合useState和useEffect存储和获取异步数据,完整示例如下:

import { useState, useEffect } from 'react'
import axios from 'axios'

// 类型定义
interface IFetchLikes {
  item_id: string;
  likes: number;
}

// 接口请求方法
const fetchLikes = async (): Promise<IFetchLikes[]> => {
  const response = await axios.get<IFetchLikes[]>('https://us-central1-involvement-api.cloudfunctions.net/capstoneApi/apps/PmGqiCAY4CG3PZPHNcEG/likes');
  return response.data;
};

// 业务组件
const LikeList = () => {
  // 状态标注对应类型
  const [likesList, setLikesList] = useState<IFetchLikes[]>([])
  const [loading, setLoading] = useState(true)
  const [error, setError] = useState<string | null>(null)

  useEffect(() => {
    // useEffect回调不能直接标记async,需在内部定义异步函数调用
    const getLikes = async () => {
      try {
        const data = await fetchLikes()
        setLikesList(data)
      } catch (err) {
        setError('获取点赞数据失败')
        console.error(err)
      } finally {
        setLoading(false)
      }
    }
    getLikes()
  }, [])

  if (loading) return <div>加载中</div>
  if (error) return <div>{error}</div>

  return (
    <ul>
      {likesList.map(item => (
        <li key={item.item_id}>
          条目ID:{item.item_id} | 点赞数:{item.likes}
        </li>
      ))}
    </ul>
  )
}
React + TypeScript 学习建议
  • 优先阅读React官方文档的TypeScript专项章节,覆盖组件Props、Hooks等常用场景的类型标注规范
  • 阅读TypeScript官方手册的React适配部分,掌握泛型组件、复杂状态类型定义等进阶用法
  • 参考开源React+TS项目的源码,学习工业级的类型设计和最佳实践
  • 多做小型实战项目练习,从基础组件到复杂状态管理逐步积累类型标注经验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:12:02