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