Middle
23
/** * Promise.any() сияқты жұмыс істейтін any функциясын жүзеге асырыңыз. * Бұл функция промистердің массивін қабылдайды (бос емес деп есептеледі) және промис қайтару керек. * Егер кез келген промис орындалса (сәтті түрде), * онда қайтарылатын промис сол мәнмен орындалады. * Егер бірнеше промис сәтті болса, * онда қайтарылатын промис * бірінші сәтті мәнмен орындалады, кез келген тәртіпте. * Егер барлық промистер қате болса, * онда қайтарылатын промис AggregateError-мен қате тастайды, * ол барлық қателерді топтастырады, промис тәртібін ескере отырып. * * AggregateError келесідей жасалуы мүмкін: * new AggregateError(errors, 'Ешқандай Promise орындалмады') */ function any(promises) { // кодты өзіңіз жазыңыз }
Сұралған компаниялар
Яндекс
AI-дан жауап
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 с массивом ошибок в порядке исходного массива.