Назад к вопросам
Т-Банк
Middle+
4
Реализуйте свою функцию promiseAll, которая является аналогом Promise.all: принимает массив промисов, возвращает промис с массивом результатов в исходном порядке, при первом rejected — сразу вызывает reject.
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Функция promiseAll принимает массив промисов и возвращает новый промис, который:
- резолвится массивом результатов, если все промисы успешно завершились,
- реджектится при первом же отклонённом промисе.
Пример реализации:
function promiseAll(promises) {
return new Promise((resolve, reject) => {
const results = [];
let completed = 0;
const total = promises.length;
if (total === 0) {
resolve([]);
return;
}
promises.forEach((p, index) => {
Promise.resolve(p)
.then(value => {
results[index] = value;
completed += 1;
if (completed === total) {
resolve(results);
}
})
.catch(err => {
reject(err);
});
});
});
}
Здесь важно сохранять порядок результатов, поэтому результат записывается по индексу. Если любой промис отклоняется, вызывается reject сразу.