Дождитесь обоих промисов через 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. Предполагается, что значения действительно числа, а не строки.