> Как создать промис, который возвращает результат первого успешно завершившегося промиса в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Яндекс
Стек: JavaScript
> Пример ответа
Для создания промиса, который возвращает результат первого успешно завершившегося промиса, можно использовать статический метод Promise.any(). Он принимает итерируемый объект (например, массив) промисов и возвращает новый промис, который разрешается значением первого успешно выполненного промиса. Если все промисы отклоняются, возвращается отклонённый промис с ошибкой AggregateError.
Пример:
JAVASCRIPTconst 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.
> Похожие задачи по frontend
В чем разница между статическими и нестатическими методами в классах JavaScript
Какой инструмент синтетического сахара используют для работы с асинхронным кодом вместо промисов
Как оптимизировать код при отправке запроса на каждый символ ввода
В чем разница между var, const и let в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью