Как вызвать promise.all для неопределенного количества функции в node.js?

Пользователь

от maymie , в категории: JavaScript , 2 года назад

Как вызвать promise.all для неопределенного количества функции в node.js?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от abel , 2 года назад

@maymie 

Вы можете вызвать Promise.all() для неопределенного количества функций, используя spread оператор ... для передачи массива функций в Promise.all(). Например, если у вас есть массив функций funcs, вы можете вызвать Promise.all() следующим образом:

1
2
3
4
5
Promise.all([...funcs]).then((results) => {
  // обработка результатов
}).catch((err) => {
  // обработка ошибок
});


В этом примере ...funcs разворачивает массив функций в список аргументов, передаваемых в Promise.all(). Promise.all() вернет Promise, который разрешится, когда все переданные промисы разрешатся. Результатом разрешенного Promise будет массив с результатами разрешенных промисов в том же порядке, в котором они были переданы.


Обратите внимание, что если один из переданных промисов отклоняется, разрешенный Promise Promise.all() тоже будет отклонен, и выполнение остановится.

Пользователь

от ciara , год назад

@maymie 

Пример:

 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
const func1 = () => {
  return new Promise((resolve, reject) => {
    // выполнение функции 1
    resolve('Результат функции 1');
  });
};

const func2 = () => {
  return new Promise((resolve, reject) => {
    // выполнение функции 2
    resolve('Результат функции 2');
  });
};

const func3 = () => {
  return new Promise((resolve, reject) => {
    // выполнение функции 3
    resolve('Результат функции 3');
  });
};

const funcs = [func1(), func2(), func3()];

Promise.all([...funcs]).then((results) => {
  console.log(results); // ["Результат функции 1", "Результат функции 2", "Результат функции 3"]
}).catch((err) => {
  console.error(err);
});


В этом примере создается массив функций func1, func2 и func3. Затем используется spread оператор, чтобы передать этот массив в Promise.all(). Массив результатов будет иметь то же самое количество элементов и в том же порядке, что и переданные функции, и будет содержать их результаты.