Практический смысл
Для await — try...catch. Для цепочек — .catch(). У fetch HTTP 4xx/5xx не reject сами по себе — проверяйте response.ok.
Подробности
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Error fetching data:', error);
}
}
fetch('https://api.example.com/data')
.then((response) => {
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return response.json();
})
.then((data) => console.log(data))
.catch((error) => console.error('Error fetching data:', error));
Не оставляйте «висящие» reject без обработчика — это unhandled rejection.
Итог
Ловите reject + отдельно проверяйте HTTP-статус у Fetch.