> Как создать промис, который возвращает результат первого успешно завершившегося промиса в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Яндекс

Стек: JavaScript

> Пример ответа

Для создания промиса, который возвращает результат первого успешно завершившегося промиса, можно использовать статический метод Promise.any(). Он принимает итерируемый объект (например, массив) промисов и возвращает новый промис, который разрешается значением первого успешно выполненного промиса. Если все промисы отклоняются, возвращается отклонённый промис с ошибкой AggregateError.

Пример:

JAVASCRIPT
const promise1 = new Promise((resolve) => setTimeout(resolve, 100, 'первый'));
const promise2 = new Promise((resolve) => setTimeout(resolve, 200, 'второй'));
const promise3 = new Promise((_, reject) => setTimeout(reject, 50, 'ошибка'));
Promise.any([promise1, promise2, promise3])
.then((result) => console.log(result)) // 'первый' (через 100 мс)
.catch((error) => console.error(error)); // не вызовется, так как есть успешный

Если нужно реализовать вручную (например, для старых окружений), можно использовать комбинацию Promise.allSettled() или написать свою логику с проверкой состояния. Однако Promise.any() - это стандартный и предпочтительный способ в современном JavaScript.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью