Вопрос проверяет понимание обработки ошибок при параллельных асинхронных операциях в JavaScript, что важно для создания отказоустойчивых приложений.
Когда несколько запросов выполняются параллельно, важно корректно обрабатывать ошибки, чтобы один сбой не нарушил работу всего приложения. В JavaScript для этого используются методы Promise.all и Promise.allSettled.
Promise.all принимает массив промисов и возвращает один промис, который разрешается, когда все промисы выполнены успешно. Если хотя бы один промис отклоняется, Promise.all немедленно отклоняется с ошибкой этого промиса. Это поведение подходит, когда все запросы критически важны и при ошибке нужно остановить выполнение.
const requests = [fetch('/api/1'), fetch('/api/2'), fetch('/api/3')];
try {
const results = await Promise.all(requests);
console.log('Все запросы успешны:', results);
} catch (error) {
console.error('Ошибка в одном из запросов:', error);
}Promise.allSettled ожидает завершения всех промисов, независимо от их статуса. Он возвращает массив объектов с полями status ('fulfilled' или 'rejected') и value/reason. Это позволяет обработать каждый запрос индивидуально, не прерывая выполнение остальных.
const requests = [fetch('/api/1'), fetch('/api/2'), fetch('/api/3')];
const results = await Promise.allSettled(requests);
results.forEach((result, index) => {
if (result.status === 'fulfilled') {
console.log(`Запрос ${index + 1} успешен:`, result.value);
} else {
console.error(`Запрос ${index + 1} ошибка:`, result.reason);
}
});Используйте Promise.all, когда все запросы критически важны и при ошибке нужно остановить выполнение. Используйте Promise.allSettled, когда нужно обработать каждый запрос независимо, например, для частичного обновления интерфейса или логирования ошибок.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию