Promise.all(promises).then(results => { ... process each result });
Метод Promise.all
принимает массив обещаний и создает новое обещание, которое успешно выполняется, если все обещания выполняются, и не выполняется, если даже одно обещание не выполняется.Успешный обратный вызов получает массив последующих значений (results
массив выше), по одному для каждого переданного обещания, в том же порядке .
В вашем примере вы обработаетеэто так:
const promises = recommendedMovies.map(({ id }) => new Promise((resolve, reject) => {
tmdb.genre.movies(id, randomNumber, (err, response) => {
if (!err) {
resolve(response.results);
} else {
reject('error')
}
});
}));
const result = Promise.all(promises);
result.then( promisesResults => {
/* promisesResults is an array where each element is result of promise at the same index */
promisesResults.forEach( promiseResult => {
/* .. process each promiseResult .. */
};
}).catch(/*...*/);
Для справки есть также Promise.race
, который принимает массив обещаний и возвращает совершенно новое обещание, которое разрешается или отклоняется, как только первое изобещания разрешаются или отклоняются.Успешный обратный вызов получает значение первого разрешенного обещания.