javascript - 如何在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
解决方案
在您的动作创建者中,您正在这样做:
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,
});