Przejdź do głównej zawartości

Po uruchomieniu kodu z przykładu z błędem, w konsoli ujrzymy Error: Unexpected token 'N', "Not Found" is not valid JSON.

API, którego użyłem do tego przykładu zwraca strony z błędem (404) w formie czystego tekstu. Tekst Not Found nie jest więc prawidłowym formatem JSON, więc wywołanie response.json() wyrzuca błąd, który zostaje przechwycony w sekcji catch().

W sekcji catch() założyłem, że wyrzucony obiekt błędu, może w jakiś sposób znać status z obiektu response.

Moglibyśmy co prawda stworzyć stałą i przypisać do niej obiekt błędu const myError = Error, a następnie dodać własność status i przypisać do niej wartość z response, dodając kod myError.status = response.status.

Musielibyśmy jednak sami obsłużyć wyrzucanie takiego błędu przez throw myError.

Po pierwsze dodajemy więc sprawdzanie własność ok w obiekcie response. Jeśli jest to wartość fałszywa, to znaczy, że kod odpowiedzi z odpytywanej strony był inny niż z zakresu 200-299.

Dodajemy więc instrukcję warunkową, która sprawdza poprzez negację if (!response.ok). Jeśli warunek zostanie spełniony to samodzielnie wyrzucamy błąd, aby później obsłużyć go w sekcji catch().

Aby w łatwy sposób uzyskać dostęp do obiektu response w wychwyconym błędzie, przekazujemy go do obiektu Error jako drugi argument z obiektem opcji i własnością cause.

Finalnie wychwycony błąd w error.cause będzie zawierał cały obiekt response. Możemy więc już łatwo obsłużyć kody błędów w catch() poprzez error.cause.status.