• 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

+1 głos
676 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 1,416 wizyt
0 głosów
2 odpowiedzi 658 wizyt
pytanie zadane 28 lutego 2020 w JavaScript przez niezalogowany
0 głosów
2 odpowiedzi 787 wizyt

93,426 zapytań

142,421 odpowiedzi

322,647 komentarzy

62,787 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...