【问题标题】:How to store the resulting array returned by the map function in JS (React Native)如何在JS中存储map函数返回的结果数组(React Native)
【发布时间】:2020-05-18 18:08:10
【问题描述】:

我该怎么做?

这是一个示例代码

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

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

【问题讨论】:

  • 您能否阐明“将结果存储在已初始化的数组中以发送到另一个文件”的意思?也许如果您发布此其他文件的代码,我们会更清楚。
  • 这是来自 and 动作创建者,它分派从 map 函数接收到的数组到 reducer 以存储在 redux 存储中 @Jacob
  • 这意味着你已经将它存储在 redux 存储中了?不知道你在问什么。
  • 你看到最后一个 then 块我需要从那里获取结果以存储在一个变量中,否则该变量是未定义的,那么我该怎么做呢?类似于我在最后一个然后块或任何其他方式中存储加载趋势电影的方式。我的方式是正确地进行控制台日志,但是当我使用选择器进入商店访问它时它是空的!
  • 你不直接发送loadedTrendingMovies吗?我认为我们需要更多地了解您的动作创建者才能将其置于上下文中。

标签: javascript reactjs react-native react-redux react-hooks


【解决方案1】:

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

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 完成之前运行。

你的动作创建者已经是一个异步函数,所以与其尝试分配给loadedTrendingMovies,你应该让你的承诺创建那个数组,然后等待它Promise 的结果:

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,
});

【讨论】:

  • 感谢您的努力,我明天会尝试并在午夜过后提供反馈
猜你喜欢
  • 2023-01-05
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
相关资源
最近更新 更多