首页 > 解决方案 > 如何在JS中存储map函数返回的结果数组(React Native)

问题描述

我该怎么做 ?

这是一个示例代码

我正在尝试将结果存储在已经初始化的数组中以发送到另一个文件?该怎么办 ?

Promise.all(

    trendingMovies.results

      .slice(0, 5) // use slice instead of a loop

      .map((

        trendingMovie // map movie to [language,movie]

      ) =>

        getLanguageNamefromCode(

          // get async language

          trendingMovie.original_language

          // resolve to [language,movie]

        ).then((language) => [language, trendingMovie])

      ) // sorry, forgot to return here

  )

    .then((

      results // results is [[language,movie],[language,movie]]

    ) =>

      results.map(([language, trendingMovie]) => {

        const hasUserSaved = getState().UserMovies.userMovies.find(

          (userMovie) => userMovie.id === trendingMovie.id.toString()

          // snippet does not have conditional chaining

        );

        return new Movie( // create new Movie

          trendingMovie.id.toString(),

          language,

          hasUserSaved ? hasUserSaved.location : ""

        );

      })

    )

    .then((movies) => {

      // loadedTrendingMovies.push(movies);

      loadedTrendingMovies = [...loadedTrendingMovies, ...movies];

      console.log("loadedTrendingMovies", loadedTrendingMovies);

    })

    .catch((err) => console.log(err)

}

应该是什么方法?如果我想更详细地研究这个主题,我应该参考什么?

...... 堆栈溢出不会让我提交 geez

标签: javascriptreactjsreact-nativereact-reduxreact-hooks

解决方案


在您的动作创建者中,您正在这样做:

let loadedTrendingMovies = [];

// ...

Promise.all(...)
  .then(...)
  .then(...)
  .then(movies => {
    loadedTrendingMovies = [...loadedTrendingMovies, ...movies];
  });

// ...

dispatch({
  type: LOAD_ALL,
  movies: loadedStories,
  new_releases: loadedTrendingMovies,
  new_tv_shows: loadedNewTVShows,
  anime: loadedAnime,
});

这样做的问题是你没有等待你的 Promise,所以dispatch会在你的 Promise 完成之前运行。

您的动作创建者已经是一个异步函数,因此您应该让 Promise创建该数组,然后等待它作为 Promise 的结果,而不是尝试分配给: loadedTrendingMovies

const loadedTrendingMovies = await Promise.all(...)
  .then(...)
  .then(results => results.map(...))

dispatch({
  type: LOAD_ALL,
  movies: loadedStories,
  new_releases: loadedTrendingMovies,
  new_tv_shows: loadedNewTVShows,
  anime: loadedAnime,
});

推荐阅读