• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dobre praktyki a obsługa błędów w JS

Object Storage Arubacloud
+1 głos
502 wizyt
pytanie zadane 3 stycznia 2021 w JavaScript przez Bartx Bywalec (2,120 p.)

Witam, mam pytanie odnośnie organizacji kodu i dobrych praktyk. Nie wiem gdzie umieścić obsługę błędów, czy w osobnej funkcji, czy bezpośrednio po kodzie który ten błąd spowodował? Mam taki kod:

xHttpReq("POST", "init", JSON.stringify(formData))
    .then(function (res) {
        console.log(res);
    })
    .catch(function (res) {
        console.log(`error code: ${res.data.error}`);
        switch (res.data.error) {
            case 3:
                //
                break;
            case 4:
                //
            default:
                break;
        }
    })

Jeśli serwer napotka błąd wysyła status http 400 oraz własny kod błędu np. 3 lub 4. I tu chcę postawić pytanie, czy robić tak jak zacząłem czyli "switch case 3: /* kod */" itd. czy może dodać funkcję np.

erorrHandler(kod_bledu) {
    switch (kod_bledu)
         case ...
         ...
} 

i w catch po prostu errorHandler(res.data.error)? Przepraszam jeżeli namieszałem

2 odpowiedzi

+2 głosów
odpowiedź 4 stycznia 2021 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 4 stycznia 2021 przez Bartx
 
Najlepsza

Użyłbym drugiego sposobu, a nawet zrobił osobny moduł do obsługi błędów (korzystając np. z wzorca Strategii). Wtedy w .catch(..), czy innej metodzie, która bezpośrednio łapie błąd można wywołać funkcję ze wspomnianego modułu, przekazując jej obiekt błędu (lub sam kod) i opcjonalnie informacje o tym, co jest obsługiwane - można podzielić obsługę błędów per endpoint lub grupę endpointów - i zajmie się tym konkretna funkcja z modułu, albo przekieruje kod do niższej warstwy przeznaczonej dla konkretnego przypadku (na podstawie wspomnianych parametrów).

Umieszczenie całej obsługi błędów po prostu w callbacku (jak w pierwszym przykładzie) jest poprawne, jeśli nie potrzebujesz reużywalności, ale na dłuższą metę i przy potrzebie dodania unit testów lepiej będzie to wydzielić.

+1 głos
odpowiedź 4 stycznia 2021 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)

Jeśli chodzi o frontend to nie spotkałem się jeszcze z przypadkiem by logika była aż tak bardzo rozległa aby konieczne było implementowanie jakiegoś rozbudowanego rozwiązania. Zapytałeś ogólnie o JS więc backend też się liczy. Na backendzie korzystam z gotowych filtrów lub tworze swoje np tak w nescie.

Podobne pytania

+6 głosów
2 odpowiedzi 856 wizyt
0 głosów
2 odpowiedzi 506 wizyt
pytanie zadane 28 lutego 2020 w JavaScript przez niezalogowany
0 głosów
2 odpowiedzi 430 wizyt

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...