Promise.any(): первый успешный результат
Promise.any завершается первым успешным результатом, пропуская отдельные отклонения до появления успеха.
Назначение
Promise.any завершается первым успешным результатом, пропуская отдельные отклонения до появления успеха.
Как это работает
Если все участники отклонены, итог отклоняется с AggregateError. Это отличается от race, где первая ошибка тоже может немедленно определить исход. Пустой набор также приводит к отказу.
Пример
Promise.any([Promise.reject("first failed"),Promise.resolve(42)]).then(value=>console.assert(value===42));
Promise.any([Promise.reject("a"),Promise.reject("b")]).catch(error=>{console.assert(error instanceof AggregateError);console.assert(error.errors.length===2);});
Что должно получиться
Первая группа возвращает 42, несмотря на один отказ. Во второй успеха нет, и причины объединены в AggregateError. Это выбор успешного исхода, а не подсчёт завершённых операций.
Граница применения и частая ошибка
Не считайте остальные операции отменёнными после успеха. Также сохраните диагностические причины отказов, если отсутствие любого результата нужно объяснить пользователю или журналу.
Самостоятельная проверка
Проверьте один отказ вместе с успехом, затем только отказы. Убедитесь, что обработчик различает успешное значение и AggregateError с набором причин.
JavaScript в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.