Назад к вопросам
Middle
3
/** * Реализовать функцию any, которая бы работала, как Promise.any(). * Функция принимает массив промисов (считаем, что непустой) и возвращает промис. * Если какой-то из переданных промисов резолвится (успешно выполняется), * то возвращаемый промис резолвится с этим значением. * Если несколько промисов успешно выполняются, * то возвращаемый промис резолвится * с первым успешным значением, вне зависимости от порядка промисов в массиве. * Если все переданные промисы реджектятся, * то возвращаемый промис реджектится с ошибкой AggregateError, * в которой сгруппированы все ошибки, с учетом порядка промисов. * * AggregateError можно создавать таким образом: * new AggregateError(errors, 'No Promise in any was resolved') */ function any(promises) { // your code here }
Компании, где спрашивали
Яндекс
Ответ от нейросети
sobes.tech AI
javascript function any(promises) { return new Promise((resolve, reject) => { const errors = []; let rejectedCount = 0; let resolved = false;
promises.forEach((p, index) => {
Promise.resolve(p)
.then(value => {
if (!resolved) {
resolved = true;
resolve(value);
}
})
.catch(error => {
errors[index] = error;
rejectedCount++;
if (rejectedCount === promises.length) {
reject(new AggregateError(errors, 'No Promise in any was resolved'));
}
});
});
}); }
Эта реализация создаёт новый промис, который резолвится при первом успешном выполнении любого из переданных промисов. Если все промисы отклоняются, возвращается AggregateError с массивом ошибок в порядке исходного массива.