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

如何访问已解析Promise中的值?getPeople返回Promise数组取值遇阻

解决getPeople返回Promise数组无法获取数据的问题

我懂你现在的困扰——你调用getPeople(0,4)后,在Promise.all的结果里拿到的item[1]还是一堆Promise,根本取不到实际的数据。问题出在getPeople函数的返回值上,它现在返回的是未处理的Promise数组,而不是一个能等待所有请求完成的Promise。

问题根源

当你把getPeople(0,4)放进Promise.all的参数数组时,Promise.all只会等待getData()这个单个Promise完成,而把getPeople返回的Promise数组直接当作普通值返回了——它不会自动去等待数组里的每个Promise resolve。所以你看到的item[1]就是那个Promise数组,而不是请求回来的数据。

修复方案

只需要修改getPeople函数,让它返回一个用Promise.all包裹后的Promise,这样它会等待所有内部的axios请求都完成后,再返回所有请求结果的数组:

function getPeople(start, end) { 
  const peopleArray = []; 
  for (let i = start; i <= end; i++) { 
    peopleArray.push(axios.get(`https://www.testsite.net/api/test/workers/${i}`)); 
  } 
  // 用Promise.all包裹Promise数组,返回一个统一的Promise
  return Promise.all(peopleArray); 
}

之后如何访问数据

修改完函数后,你的useEffect代码就可以正常拿到数据了:

useEffect(() => { 
  Promise.all([getData(), getPeople(0, 4)]).then(item => { 
    // item[0] 是getData的结果,item[1] 是所有人员请求的响应数组
    console.log(item[1]); // 现在这里是每个axios响应对象的数组
    // 比如要拿第一个人的数据:item[1][0].data
    setPersonData(item); 
  }).catch(error => {
    // 别忘了处理请求失败的情况
    console.error('请求出错:', error);
  }); 
}, []);

可选:用async/await让代码更清晰

如果你觉得Promise链式调用看着麻烦,也可以改成async/await的写法,可读性更高:

useEffect(() => { 
  const fetchAllData = async () => {
    try {
      // 并行发起两个请求,等待全部完成
      const [dataResult, peopleResult] = await Promise.all([getData(), getPeople(0, 4)]);
      console.log(peopleResult); // 直接拿到所有人员的响应数据
      setPersonData([dataResult, peopleResult]);
    } catch (error) {
      console.error('请求失败:', error);
    }
  };

  fetchAllData();
}, []);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:32:35