Back to questions
Middle
2
Live coding: реализовать полифилл метода Promise.all, включая сохранение порядка результатов
Companies where asked
X-Notes
Answer from AI
sobes.tech AI
Реализация полифилла для Promise.all должна принимать массив промисов и возвращать новый промис, который:
- резолвится, когда все промисы из массива резолвятся,
- реджектится, если любой из промисов реджектится,
- сохраняет порядок результатов согласно порядку входных промисов.
function promiseAll(promises) {
return new Promise((resolve, reject) => {
if (!Array.isArray(promises)) {
return reject(new TypeError('Argument must be an array'));
}
const results = [];
let completed = 0;
const total = promises.length;
if (total === 0) {
return resolve([]);
}
promises.forEach((p, index) => {
Promise.resolve(p)
.then(value => {
results[index] = value;
completed += 1;
if (completed === total) {
resolve(results);
}
})
.catch(err => {
reject(err);
});
});
});
}
Этот код обрабатывает как промисы, так и обычные значения (через Promise.resolve), аккуратно сохраняет порядок результатов и корректно обрабатывает ошибки.