Почему fetch не попадает в catch при ошибке 404

22.09.2021 · JavaScript

Почему 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 без необходимости. В интерфейсе покажите понятное сообщение и возможность повторить действие; консоль полезна только разработчику.

Назад в блог

От идеи —
к первому шагу.

Расскажите, что хотите создать.
Обсудим задачу и наметим следующий шаг.