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

React中嵌套Promise后如何提取Promise内的纯对象?

问题解决:React中Promise数组未解析为对象数组

你的核心问题是没有等待所有电影请求的Promise完成就更新状态,导致setMovies接收的是一组未解析的Promise,而非最终的电影对象。

问题原因

movieUrls.map(...)会返回一个Promise数组,但这些Promise仍在异步执行中,直接将这个数组传递给setMovies,状态中就会存储Promise实例,而非解析后的对象。

修改后的代码

链式Promise写法

Promise.all([getStarships(user)])
  .then((result) => result[0][starshipIndex].films)
  .then((movieUrls) => {
    // 用Promise.all等待所有getMovies请求完成
    return Promise.all(
      movieUrls.map((movieUrl) => 
        getMovies(movieUrl).then((data) => data[0])
      )
    );
  })
  .then((movieList) => setMovies(movieList))
  .catch((error) => console.warn(error))

Async/Await写法(更易读)

// 需在async函数内执行
try {
  const starshipsResult = await Promise.all([getStarships(user)]);
  const movieUrls = starshipsResult[0][starshipIndex].films;
  const movieList = await Promise.all(
    movieUrls.map(movieUrl => getMovies(movieUrl).then(data => data[0]))
  );
  setMovies(movieList);
} catch (error) {
  console.warn(error);
}

关键说明

Promise.all()会接收一个Promise数组,等待所有Promise都成功解析后,返回一个包含所有结果的数组。此时传递给setMovies的就是你需要的纯电影对象数组,而非Promise实例。

内容的提问来源于stack exchange,提问作者Danko Grgić

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:36:10