I'm trying to get an object with ratings
and titles
properties:
{
ratings: [3, 5],
titles: ['Movie1', 'Movie2']
}
from the following two functions:
const getMovies = () => {
return new Promise((resolve) => {
resolve([
{
movieId: 1,
rating: 3
},
{
movieId: 2,
rating: 5
}
]);
});
};
const getTitle = (movieId) => {
return new Promise((resolve, reject) => {
switch (movieId) {
case 1:
resolve({ title: "Movie1" });
break;
case 2:
resolve({ title: "Movie2" });
break;
default:
reject(new Error("404 - movie not found"));
}
});
};
I'm avoiding async/await
, so trying to get that result using then
.
Here is my approach:
const result = {}
getMovies()
.then((movies) => {
result.ratings = movies.map(({rating}) => rating)
return Promise.all(movies.map(({ movieId }) => getTitle(movieId)));
})
.then((titles) => {
result.titles = titles.map(({title}) => title)
console.log(result)
})
.catch(console.log)
Can I do this in a better way withou having to nest then
inside then
? I don't like the use of a external variable to gather my result, but I don't like the nested thens in this other approach:
getMovies()
.then((movies) => {
Promise.all(movies.map(({ movieId }) => getTitle(movieId)))
.then((titles) => {
console.log({
ratings: movies.map(({rating}) => rating),
titles: titles.map(({title}) => title),
})
})
.catch(console.log)
})
.catch(console.log)
How can I improve this using then
and not async/await
?
getMovies
: what is returned? An object like this:{movieId:..., title:..., rating:...}
? If you code it, how do you decide those values? I'm confused... And the object you are trying to get, why not:movies={movieId001:{title:"some title", rating:some rating}, movieId002:{title........},...}
? \$\endgroup\$then
with promises. \$\endgroup\$then
. Anyway, thanks for your input. \$\endgroup\$