0Pricing
JavaScript Academy · Lekcja

Obsługa błędów i kodów stanu

Proszę sprawdzać response.ok i obsługiwać błędy.

Obsługa błędów i kodów stanu to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 4 lekcji w sumie.

fetch nie odrzuca obietnicy przy błędach HTTP

Zaskakująca pułapka: fetch odrzuca Promise wyłącznie przy błędach sieciowych. Odpowiedź 404 lub 500 nadal powoduje pomyślne spełnienie Promise. Status należy sprawdzać samodzielnie.

Sprawdzanie response.ok

response.ok ma wartość true tylko dla kodów statusu z zakresu 200–299. Należy używać go do wykrywania błędów HTTP.
const response = await fetch(url);
if (!response.ok) {
  console.log("HTTP error:", response.status);
}

Odczytywanie kodu statusu

response.status zwraca kod liczbowy, a response.statusText — krótki komunikat. Na ich podstawie należy rozgałęziać logikę, aby obsługiwać konkretne przypadki.
if (response.status === 404) console.log("Not found");
if (response.status === 401) console.log("Unauthorized");

Zgłaszanie błędu przy nieprawidłowym statusie

Przejrzystym rozwiązaniem jest zgłaszanie błędu Error, gdy odpowiedź nie jest prawidłowa, dzięki czemu jeden blok catch obsługuje zarówno błędy sieciowe, jak i błędy HTTP.
if (!response.ok) {
  throw new Error("Request failed: " + response.status);
}

Umieszczanie w try/catch

W przypadku użycia async/await cały przepływ należy umieścić w bloku try/catch. Błędy sieciowe odrzucają Promise i trafiają do catch; tak samo stanie się z samodzielnie zgłoszonym błędem HTTP.
try {
  const res = await fetch(url);
  if (!res.ok) throw new Error("Status " + res.status);
  const data = await res.json();
} catch (err) {
  console.log("Failed:", err.message);
}

Rozróżnianie typów błędów

Odrzucenie fetch zwykle oznacza, że serwer był niedostępny, wystąpił błąd DNS lub CORS zablokował żądanie. Odpowiedź niebędąca prawidłową odpowiedzią oznacza, że serwer odpowiedział, ale zwrócił błąd. W razie potrzeby należy obsługiwać te przypadki osobno.

Odczytywanie treści błędów

Interfejsy API często zwracają JSON opisujący błąd. Przed jego zgłoszeniem należy odczytać tę treść, aby wyświetlić użyteczny komunikat.
if (!res.ok) {
  const errBody = await res.json().catch(() => ({}));
  throw new Error(errBody.message || ("Status " + res.status));
}

Typowe kody statusu

Należy znać poszczególne rodziny kodów: 2xx oznacza powodzenie, 3xx przekierowanie, 4xx błąd klienta (wysłano coś nieprawidłowego), a 5xx błąd serwera (problem leży po jego stronie). Fetch automatycznie podąża za większością przekierowań.

Wielokrotnie używany pomocnik

Sprawdzanie należy scentralizować w jednym pomocniku, aby każde miejsce wywołania zapewniało spójną obsługę błędów.
async function getJSON(url) {
  const res = await fetch(url);
  if (!res.ok) throw new Error("HTTP " + res.status);
  return res.json();
}

Ponawianie prób przy przejściowych błędach

W przypadku niestabilnych sieci można ponawiać próbę po błędach 5xx lub błędach sieciowych. Liczba ponowień powinna być niewielka, a między nimi należy dodać opóźnienie, aby nie przeciążać serwera.
for (let i = 0; i < 3; i++) {
  try { return await getJSON(url); }
  catch (e) { if (i === 2) throw e; }
}

Wyświetlanie błędów użytkownikowi

Błędy należy przechwytywać na warstwie interfejsu użytkownika, aby wyświetlić przyjazny komunikat zamiast pustego ekranu. Nie należy nigdy pozwalać, aby nieobsłużone odrzucenie po cichu ukryło nieudane żądanie.
getJSON(url)
  .then(render)
  .catch(() => showToast("Could not load data"));

Szybki sprawdzian

Obsługa błędów fetch.

Podsumowanie

fetch odrzuca Promise tylko przy błędach sieciowych, dlatego zawsze należy sprawdzać response.ok/response.status i zgłaszać błędy przy nieprawidłowych statusach. Wywołania należy umieszczać w try/catch, odczytywać treść błędów w celu uzyskania komunikatów, centralizować sprawdzanie w pomocniku i wyświetlać przyjazne błędy w interfejsie użytkownika.

Często zadawane pytania

Czy lekcja „Obsługa błędów i kodów stanu” jest bezpłatna?

Tak — pełny tekst „Obsługa błędów i kodów stanu” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Obsługa błędów i kodów stanu”?

Proszę sprawdzać response.ok i obsługiwać błędy. Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?

Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Obsługa błędów i kodów stanu”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?

Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wysyłanie żądań GET
  2. POST i wysyłanie danych
  3. Obsługa błędów i kodów stanu
  4. Przerywanie żądań za pomocą AbortController
← Powrót do JavaScript Academy