Вопрос проверяет понимание того, как гарантировать сохранение порядка результатов в кастомной реализации Promise.all при параллельном выполнении асинхронных операций.
При параллельном выполнении промисов с помощью Promise.all важно, чтобы результаты возвращались в том же порядке, в котором были переданы промисы. Это достигается за счёт использования индексов и массива фиксированной длины.
Создаётся массив результатов с длиной, равной количеству промисов. Каждый промис при разрешении записывает свой результат в соответствующую позицию. После завершения всех промисов возвращается этот массив.
function promiseAll(promises) {
return new Promise((resolve, reject) => {
const results = new Array(promises.length);
let completed = 0;
promises.forEach((promise, index) => {
Promise.resolve(promise)
.then(value => {
results[index] = value;
completed++;
if (completed === promises.length) {
resolve(results);
}
})
.catch(reject);
});
if (promises.length === 0) {
resolve(results);
}
});
}results инициализируется с длиной, равной количеству промисов.results[index], где index — позиция промиса в исходном массиве.completed отслеживает количество завершённых промисов.results возвращается с сохранением порядка.Такой подход гарантирует, что порядок результатов соответствует порядку переданных промисов, что критично для корректной обработки данных в асинхронных сценариях, например, при загрузке данных по списку URL.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию