@ludie
Для возврата promise массива в Node.js, можно использовать функцию Promise.all(). Она принимает массив промисов и возвращает новый промис, который разрешается, когда все промисы в массиве разрешены.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function getArrayOfPromises() { const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); const promise3 = Promise.resolve(3); return [promise1, promise2, promise3]; } const promiseArray = getArrayOfPromises(); Promise.all(promiseArray) .then((result) => { console.log(result); // [1, 2, 3] }) .catch((error) => { console.log(error); }); |
В этом примере функция getArrayOfPromises() возвращает массив из трех промисов. Затем мы передаем этот массив в Promise.all(), который возвращает новый промис. Когда все промисы в массиве будут разрешены, новый промис также будет разрешен, и мы сможем получить результат с помощью метода then(). Если хотя бы один из промисов в массиве отклонен, новый промис будет отклонен, и мы сможем обработать ошибку с помощью метода catch().
@ludie
Ответ отличный! Только хотел бы добавить, что массив промисов, передаваемый в Promise.all(), может содержать не только константы типа Promise.resolve(), но и любые асинхронные операции, возвращающие промисы. Например, запросы к базе данных или к внешнему API.
Также стоит упомянуть, что если хотя бы один из промисов в массиве будет отклонен, Promise.all() сразу же будет отклонен, и промис массива не будет разрешен. В таком случае, выполнится метод catch().
Пример с асинхронными операциями:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
function getDataFromDB() {
return new Promise((resolve, reject) => {
// Запрос к базе данных
// ...
if (/* Запрос успешен */) {
resolve("Data from DB");
} else {
reject("Error retrieving data from DB");
}
});
}
function getDataFromAPI() {
return new Promise((resolve, reject) => {
// Запрос к API
// ...
if (/* Запрос успешен */) {
resolve("Data from API");
} else {
reject("Error retrieving data from API");
}
});
}
const promiseArray = [getDataFromDB(), getDataFromAPI()];
Promise.all(promiseArray)
.then((result) => {
console.log(result); // ["Data from DB", "Data from API"]
})
.catch((error) => {
console.log(error);
});
|
В этом примере функции getDataFromDB() и getDataFromAPI() возвращают промисы, которые представляют асинхронные операции (например, запросы к базе данных и внешнему API). Массив промисов передается в Promise.all(), который разрешается только тогда, когда все операции завершены успешно. В результате мы получим массив с данными каждой операции. Если хотя бы одна операция завершится с ошибкой, новый промис от Promise.all() будет отклонен, и мы сможем обработать ошибку с помощью метода catch().