@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()
.