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

SearchExercises.js报错:bodyPartsData不可迭代问题求助

问题排查与解决

错误根源

报错的核心原因是**fetchData函数里的response.json()没有加await**,导致bodyPartsData拿到的不是接口返回的数组,而是一个Promise对象。而展开运算符...只能用于数组、字符串这类可迭代对象,Promise不可迭代,所以触发了TypeError。

修复步骤

1. 修正fetchData函数

给response.json()加上await,确保拿到实际的接口返回数据:

export const fetchData = async (url, options) => {  
  const response = await fetch(url, options);  
  const data = await response.json(); // 新增await,等待JSON解析完成

  return data;  
}; 

2. 增加防御性代码(可选但推荐)

为了避免接口返回非数组数据的情况,在设置状态时做兜底处理:

useEffect(() => {  
  const fetchExercisesData = async () => {  
    try {
      const bodyPartsData = await fetchData('https://exercisedb.p.rapidapi.com/exercises/bodyPartList', exerciseOptions);  
      // 确保bodyPartsData是数组,否则用空数组兜底
      setBodyParts(['all', ...(Array.isArray(bodyPartsData) ? bodyPartsData : [])]);  
    } catch (error) {
      console.error('获取身体部位数据失败:', error);
      // 出错时仅保留默认的'all'选项
      setBodyParts(['all']);
    }
  };  

  fetchExercisesData();  
}, []); 

补充说明

response.json()本身是异步操作,返回一个Promise,必须用await等待它解析完成,才能拿到真正的JSON数据。之前的代码直接返回这个Promise,导致后续用展开运算符处理时,操作的是Promise对象而非数组,自然会报错。

内容的提问来源于stack exchange,提问作者Josh Ivan Lanuevo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:55:15