Почему fetch не попадает в catch при ошибке 404
Запрос вернул страницу ошибки, но обработчик catch не сработал. fetch отклоняет Promise при сетевом сбое, а HTTP-ответ 404 сам по себе остаётся полученным ответом.
fetch("/api/items/")
.then(function(response) {
if (!response.ok) throw new Error("HTTP " + response.status);
return response.json();
})
.then(function(data) { console.log(data); })
.catch(function(error) { console.error(error); });
Проверка статуса должна идти до разбора JSON. Иначе вместо понятной HTTP-ошибки получите ошибку парсинга HTML. Для ответа 204 не вызывайте json без необходимости. В интерфейсе покажите понятное сообщение и возможность повторить действие; консоль полезна только разработчику.