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

Fetch owinięty w new Promise

VPS Starter Arubacloud
+1 głos
121 wizyt
pytanie zadane 10 sierpnia 2019 w JavaScript przez Kamil M Bywalec (2,340 p.)
edycja 10 sierpnia 2019 przez Kamil M

Cześć,
Mam pytanie dotyczące fetch. Przerabiam pewien kurs i koleś zrobił coś takiego: 

class EasyHTTP {
    get(url) {
        return new Promise((resolve, reject) => {
            fetch(url)
                .then(response => response.json())
                .then(data => resolve(data))
                .catch(error => reject(error));
        });
    }
}

const http = new EasyHTTP;

http.get('https://jsonplaceholder.typicode.com/users')
     .then(data => console.log(data))
     .catch(reason => console.log(Error(reason)));

Czy istnieje jakiś powód, dla którego powinno się owijać fetch w new Promise? Przecież fetch sam w sobie zwraca promise. Przerobiłem to na coś takiego i w praktyce też działa:

class EasyHTTP {
    get(url) {
        return fetch(url)
            .then(response => response.json())
            .then(data => data)
            .catch(reason => Error(reason));
    }
}

const http = new EasyHTTP;

http.get('https://jsonplaceholder.typicode.com/users')
    .then(data => console.log(data))
    .catch(reason => console.log(Error(reason)));

 

À propos programowania obiektowego. Czy nie lepszym rozwiązaniem byłoby tutaj wykorzystanie statycznych metod skoro klasa i tak nie ma konstruktora?

1
komentarz 10 sierpnia 2019 przez BT101 Stary wyjadacz (12,540 p.)

Ten 1 fragment kodu to deferred antipattern

2 odpowiedzi

0 głosów
odpowiedź 10 sierpnia 2019 przez adrian17 Ekspert (344,100 p.)
wybrane 10 sierpnia 2019 przez Kamil M
 
Najlepsza

Czy istnieje jakiś powód, dla którego powinno się owijać fetch w new Promise?Przecież fetch sam w sobie zwraca promise. 

Raczej nie. Jeszcze fajniej byłoby to przepisać z async/await.

 Czy nie lepszym rozwiązaniem byłoby tutaj wykorzystanie statycznych metod skoro klasa i tak nie ma konstruktora?

Być może jeszcze lepszym byłyby zwykłe wolne funkcje ;)

komentarz 10 sierpnia 2019 przez Kamil M Bywalec (2,340 p.)

Dzięki za odpowiedź smiley Czy coś takiego jest bardziej poprawne?

class EasyHTTP {
    static async get(url) {
        try {
            const response = await fetch(url);
            const json = await response.json();
            return json;
        } 
        catch(reason) {
            return Error(reason);
        }
    }
}

Co do wolnych funkcji to zawsze mam mindfuck. Teoretycznie dużo rzeczy można robić wolnymi funkcjami bez używania OOP. Tak naprawdę kiedy piszę coś sam z siebie to rzadko odczuwam potrzebę używania konstruktorów i innych cudów. Może za mało jeszcze zakodowałem, żeby używać ich w odpowiednich sytuacjach laugh

0 głosów
odpowiedź 10 sierpnia 2019 przez Selfie Początkujący (440 p.)
Cześć! Nie. Pozdrawiam!!

Podobne pytania

0 głosów
0 odpowiedzi 127 wizyt
+1 głos
1 odpowiedź 1,181 wizyt
pytanie zadane 7 maja 2018 w JavaScript przez Kacper Łochowski Początkujący (270 p.)
0 głosów
1 odpowiedź 770 wizyt
pytanie zadane 28 kwietnia 2017 w JavaScript przez moofi Początkujący (470 p.)

92,453 zapytań

141,262 odpowiedzi

319,087 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...