Суммирование результатов двух промисов

Дождитесь обоих промисов через Promise.all и сложите числа. async-функция вернёт Promise с суммой либо отклонится, если хотя бы один входной Promise завершится ошибкой.

Короткий ответ

Что ответить на собеседовании

Дождитесь обоих промисов через Promise.all и сложите числа. async-функция вернёт Promise с суммой либо отклонится, если хотя бы один входной Promise завершится ошибкой.

Подробный разбор

Ответ с пояснениями

Условие

Задача: реализовать асинхронную функцию addTwoPromises, которая принимает два Promise, каждый из которых резолвится числом, и возвращает их сумму.


 const addTwoPromises = async (promise1, promise2) => { };

console.log()

/* */

* addTwoPromises( Promise.resolve(2), Promise.resolve(2 ) )
* .then( console.log ); // 4

Примеры:

  • Ввод:
const p1 = new Promise(resolve => setTimeout(() => resolve(2), 20));
const p2 = new Promise(resolve => setTimeout(() => resolve(5), 60));

Вывод: 7 Пояснение: первый промис возвращает 2, второй — 5, их сумма = 7.

  • Ввод:
const p1 = new Promise(resolve => setTimeout(() => resolve(10), 50));
const p2 = new Promise(resolve => setTimeout(() => resolve(-12), 30));

Вывод: -2 Пояснение: 10 + (-12) = -2.

Ответ

Дождитесь обоих промисов через Promise.all и сложите числа. async-функция вернёт Promise с суммой либо отклонится, если хотя бы один входной Promise завершится ошибкой.

const addTwoPromises = async (promise1, promise2) => {
  const [first, second] = await Promise.all([promise1, promise2]);
  return first + second;
};
addTwoPromises(Promise.resolve(2), Promise.resolve(5)).then(console.log); // 7

Обе операции уже запущены к моменту передачи промисов; Promise.all только координирует ожидание и сразу устанавливает обработчики ошибок на оба. Для 10 и -12 результат -2. Предполагается, что значения действительно числа, а не строки.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее