Проверяет понимание обработки ошибок в параллельных промисах через Promise.allSettled и другие комбинаторы, что важно для устойчивых асинхронных операций.
Когда несколько асинхронных операций запускаются параллельно, стандартный Promise.all отклоняется при первой же ошибке, теряя результаты остальных промисов. Чтобы обработать каждую ошибку отдельно и не прерывать выполнение, применяют Promise.allSettled или ручное оборачивание промисов в .catch().
Метод возвращает промис, который всегда выполняется успешно и содержит массив объектов с полями status и value или reason. Это позволяет анализировать каждый результат отдельно.
const promises = [
fetch('/api/a'),
fetch('/api/b'),
Promise.reject(new Error('fail'))
];
const results = await Promise.allSettled(promises);
results.forEach(r => {
if (r.status === 'fulfilled') console.log(r.value);
else console.error(r.reason);
});Если нужен более гибкий формат, каждый промис можно обернуть так, чтобы ошибка возвращалась как значение. Это позволяет использовать Promise.all без риска отклонения.
const safe = p => p.then(
value => ({ ok: true, value }),
error => ({ ok: false, error })
);
const results = await Promise.all([
safe(fetch('/api/a')),
safe(fetch('/api/b'))
]);Итог: используйте Promise.allSettled или оборачивание в .catch(), когда нужно обработать ошибки каждого параллельного промиса отдельно и не прерывать выполнение остальных.