Задача
Реализуйте Promise.any: резолвит значением первого успешного промиса. Если все промисы отклонены — реджектит AggregateError.
Решение
Оптимальное решение
Promise.myAny = function (promises) { return new Promise((resolve, reject) => { if (!Array.isArray(promises)) { return reject(new TypeError('Аргумент должен быть массивом')); } if (promises.length === 0) { return reject(new AggregateError([], 'All promises were rejected')); } const errors = []; let rejectedCount = 0; promises.forEach((promise, index) => { Promise.resolve(promise) .then((value) => { // Первый успешный - сразу резолвим resolve(value); }) .catch((error) => { errors[index] = error; rejectedCount++; // Все отклонены - возвращаем AggregateError if (rejectedCount === promises.length) { reject(new AggregateError(errors, 'All promises were rejected')); } }); }); }); };