JavaScript obiecuje samouczek z przykładami

JavaScript obiecuje samouczek z przykładami

Choć wcześniej dostępne za pośrednictwem bibliotek stron, obietnice zostały wprowadzone w JavaScript, jako rodzimy
funkcja z ecmascript6.

Stanowią alternatywę dla zwrotów zwrotnych w kontaktach z kodem asynchronicznym, zapewniając,
Wśród innych rzeczy, czystszy sposób radzenia sobie z błędami. W tym samouczku zobaczymy, jak działają obietnice, jak to zrobić
Utwórz je i jak używać ich metod.

W tym samouczku nauczysz się:

  • Czym jest obietnica JavaScript.
  • Jak stworzyć obietnicę JavaScript.
  • Jak można użyć obietnic do zarządzania kodem asynchronicznym.
  • Jakie są metody, które można użyć z obietnicą.

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System System operacyjny agnostyk.
Oprogramowanie Instalacja węzeł Aby śledzić ten samouczek w środowisku niebędącym przeglądarką.
Inny Znajomość koncepcji JavaScript i obiektowych.
Konwencje # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny

Czym jest „obietnica”?

W JavaScript, a obietnica jest obiektem zwróconym w wyniku
asynchroniczna, nie blokująca operacja, na przykład ta wykonana przez aportować
Funkcja wbudowana. Obietnice zostały wprowadzone jako funkcja natywna z EcMascript6: reprezentują
czystsza alternatywa dla wywoławczych, dzięki funkcjom takim jak łączenie metod i fakt, że zapewniają one
sposób zarządzania błędami, które przypominają obsługę wyjątków w kodzie synchronicznym. Są trzy stany obiecane
może być w:

  • Aż do
  • Rozwiązany
  • Odrzucony

Jak sama nazwa wskazuje, mówimy, że jest obietnica aż do Kiedy jego wynik nie został jeszcze rozstrzygnięty,
więc nadal można go rozwiązać lub odrzucić. Mówimy, że jest obietnica spełniony Kiedy asynchroniczny
Operacja zakończyła się powodzeniem: obietnica została rozwiązana i zawiera wynik samej operacji.
Wreszcie, mówi się, że jest obietnica odrzucony Gdy operacja asynchroniczna się nie powiedzie: w takim przypadku
Obietnica będzie zawierać przyczynę awarii.

Tworzenie obietnicy JavaScript



Jak wspomniano powyżej, niektóre funkcje, które wykonują operacje asynchroniczne, takie jak aportować, powrót
Domyślnie obietnica, abyśmy mogli użyć metod i wzorów, które opiszemy później w tym samouczku poza pudełkiem. Inne funkcje
Nie wspiera jeszcze obietnic, więc możemy chcieć stworzyć obietnicę wokół nich. Konstruktor obietnicy bierze jeden argument,
która jest funkcją odwołania, która sama przyjmuje dwa argumenty: rozstrzygać I odrzucić oddzwonienia, które
są wezwani do rozwiązania lub odrzucenia obietnicy odpowiednio. Zobaczmy szybki przykład, jak stworzyć trywialną obietnicę:

const obiecing = new obiecing (funkcja (rozdzielcz, odrzuć) settimeout (rozdzielcz, 100, „sukces!'); ); 

Z powyższym kodem stworzyliśmy obietnicę, która w rzeczywistości będzie zawsze rozwiązywana, ponieważ przy użyciu
Settimeout funkcja, nazywamy rozstrzygać oddzwonienie po limicie 100 milisekund,
Przekazanie ciągu „Sukces!„Jako jedyny argument zwrotu oddzwonienia. W ten sam sposób, jeśli chcieliśmy obietnicy
do odrzucenia, powinniśmy przywołać odrzucić oddzwonić. Oczywiście obietnica taka jak
Jeden powyżej nie jest dla nas bardzo przydatny, więc teraz spróbujemy stworzyć obietnicę wokół faktycznie użytecznej funkcji.

odczyt Metoda fs moduł, asynchronicznie odczytuje zawartość pliku i
przyjmuje trzy argumenty: dwa z nich są obowiązkowe, a jeden jest opcjonalny. Pierwszym argumentem jest ścieżka pliku
do przeczytania. Drugi argument jest opcjonalny, a wraz z nim możemy na przykład określić
kodowanie być stosowane. Trzecim argumentem jest funkcja wywołania zwrotnego, która sama przyjmuje dwa argumenty:
błądzić I dane.

Jeśli operacja odczytu się nie powiedzie, pierwszy argument będzie zawierał Błąd
Obiekt i drugi zostaną niezdefiniowane; Jeśli operacja zakończy się powodzeniem, drugim argumentem będzie
ciąg reprezentujący zawartość pliku lub surowy bufor, jeśli nie zostanie określone kodowanie, a pierwszy argument będzie
Być zero. Powiedz na przykład, chcę przeczytać moje .VIMRC Plik za pomocą tej funkcji:

const fs = wymaga („fs”); fs.czytaj plik ('.vimrc ',' utf-8 ', funkcja (err, data) if (err) throw err konsola.log (data)); 


Przede wszystkim potrzebowaliśmy fs moduł i przypisał go do fs stały, niż
Poszliśmy wywołując odczyt metoda. W przypadku wywołania zwrotnym zaakceptowanym jako ostatni argument funkcji wykonujemy
potrzebne operacje w zależności od uzyskanego wyniku. W powyższym kodzie rzucić wyjątek, jeśli wystąpi jakiś błąd
Podczas próby odczytania pliku, a my po prostu drukujemy zawartość pliku, jeśli wszystko pójdzie zgodnie z oczekiwaniami. W takim przypadku byłoby to
Wynik (obcięty):

[…] Ustaw FileFormat = UNIX SET TEXTWIDTH = 79 Ustaw NoswapFile Set FoldMethod = wskaźnik set foldlevel = 99 Ustaw set splitbelow set hlsearch set incsearch set SET SET SETCASE […] 

Metoda, której właśnie użyliśmy, odczyt, wykonuje asynchronicznie operację odczytu, więc nie blokuje. Domyślnie to nie,
Jednak wspieranie obietnic. Jeśli chcemy „obiecać” zastosowanie tej metody, sami powinniśmy stworzyć obietnicę wokół niej:

const fs = wymaga („fs”); funkcja readFilePromise (filePath) return new obiec.readFile (FilePath, 'utf-8', funkcja (err, data) if (err) reject (err); else rozdzielcz (data);); );  

Spójrz na powyższy kod, co zmieniliśmy? Stworzyliśmy ReadFilePromise Funkcja: wewnątrz
obietnica oparta na wyniku fs.odczyt Metoda jest tworzona i zwracana. W poprzednim przykładzie,
Dostosowaliśmy kod, aby rzucić wyjątek, jeśli błąd w operacji odczytu był obecny: w tym przypadku, ponieważ my
buduje obietnicę, jeśli wystąpi błąd, wywołujemy odrzucić oddzwonienie, przekazywanie błędu jako jedynego argumentu,
W ten sposób odrzucając obietnicę. Jeśli operacja odczytu jest przeprowadzana pomyślnie, zamiast tego dzwonimy rozstrzygać, przechodzący
dane wynikające z operacji odczytu jako argumentu, spełniając w ten sposób obietnicę. W następnym akapicie zobaczymy, jak
Aby faktycznie pochłonąć obietnicę, którą właśnie stworzyliśmy.



Metody obietnicy

Obiekt obietnicy nie przydałby się, gdybyśmy nie mieli sposobów na interakcję z nim i konsumpcję. W tej sekcji będziemy
Opisz metody, które możemy użyć w obiekcie obietnicy. Każda z tych metod działa na obietnicę, a z kolei zwraca obietnicę
sam, pozwalając nam stworzyć „stos” i wykonać metodę łańcuch.

Następnie metoda

Następnie Metoda przyjmuje dwa argumenty, które w rzeczywistości są dwoma zwrotami, które należy wykonać odpowiednio, gdy obietnica
jest spełniony, a kiedy zostanie odrzucony i zwraca obietnicę. Trzymając się powyższego przykładu, oto jak moglibyśmy użyć tej metody
Aby wchodzić w interakcje z obietnicą, zwróconą, gdy zadzwonimy ReadFilePromise funkcjonować:

ReadFilePromise ('.vimrc ').Następnie (funkcja onResolVeCallback (data) konsola.log (dane); , funkcja onrejectCallback (powód) konsola.log („komunikat o błędzie to $ powód”); ) 

Kiedy obietnica wychodzi z aż do stan, a zatem jest to rozwiązane lub odrzucone, Następnie metoda
wykonany. Jeśli obietnica zostanie rozwiązana, pierwsze oddzwonienie (w tym przypadku nazwaliśmy oddzwonienie, aby ułatwić zrozumienie ich ról)
jest wykonywany, a jego argument zawierał wynik operacji asynchronicznej (w tym przypadku treść „.plik vimrc ”jako ciąg).
Jeśli obietnica zostanie odrzucona, zamiast tego zostanie wykonany drugi zwrot (nazwaliśmy go onrejectCallback): jego argument będzie zawierał błąd
co spowodowało awarię operacji odczytu.

złapać metoda

w odróżnieniu Następnie, który obsługuje zarówno, gdy obietnica jest rozwiązana i odrzucona, złapać Metoda jest bardziej szczegółowa,
i zajmuje się tym drugim przypadkiem. Stosowanie tej metody jest odpowiednikiem stosowania Następnie z nieokreślony jak
Pierwszy argument, zamiast oddzwonienia używanego do obsługi sprawy, gdy obietnica jest spełniona, oraz z prawidłowym zwrotem oddzwonienia do obsługi
przypadek, gdy obietnica jest odrzucona, jako druga. Ta metoda zwraca obietnicę, a używając jej, możemy przepisać powyższy kod w ten sposób:



ReadFilePromise ('.vimrc ') // Wewnątrz „Następnie„ Zarządzamy sprawą, gdy obietnica jest spełniona, zajmując się // z możliwymi błędami wewnątrz „Catch” .następnie (funkcja (data) konsola.log (dane); ) .catch (funkcja (powód) konsola.log („komunikat o błędzie to $ powód”); ) 

Obserwuj, jak dołączyliśmy złapać metoda po Następnie: to jest możliwe
Ponieważ, jak powiedzieliśmy powyżej, każda metoda sama zwraca obietnicę, więc można je przykuć.

Wreszcie metoda

Jako metody, które widzieliśmy powyżej, Wreszcie zwraca obietnicę. Jest zawsze wykonywany bez względu na stan obietnicy,
zarówno, jeśli zostanie rozwiązany lub odrzucony. Z tego powodu wywołanie zwrotne nie wymaga żadnych argumentów, ponieważ kiedy działa, nie ma sposobu na ustalenie
Jeśli obietnica została odrzucona lub rozwiązana. Używamy tej metody, gdy chcemy uruchomić kod ogólny, który powinien być uruchomiony w każdym przypadku.

ReadFilePromise ('.vimrc ') .następnie (funkcja (data) konsola.log (dane); ) .catch (funkcja (powód) konsola.log („komunikat o błędzie to $ powód”); ) .Wreszcie (funkcja () konsola.Log („Zawsze jestem wykonywany!");) 

W powyższym przykładzie, niezależnie od tego, czy obietnica jest rozwiązana, czy odrzucona, ciąg „Zawsze jestem wykonywany!„Jest wydrukowany na konsoli.

wyścig metoda

Ta metoda przyjmuje iterabinę (na przykład tablicę) jako jej argument. Zwraca obietnicę, która zostanie rozwiązana lub odrzucona, gdy tylko
Obietnica zawarta w iteracyjnym, istnieje stan oczekujący i zostaje odrzucony lub rozwiązany. Zwrócona obietnica będzie miała
wartość spełnienia lub powód odrzucenia wspomnianej obietnicy.



const p1 = new o obietnicy (funkcja (rozdzielcz, odrzuć) settimeout (rozdzielcz, 100, „rozstrzygnięta!'); ); const p2 = new o obietnicy (funkcja (desolve, odrzuć) settimeout (odrzucenie, 50, „odrzucono!'); ); Obietnica.Rasa ([P1, P2]) .następnie (funkcja (data) konsola.log (dane); ) .catch (funkcja (powód) konsola.log (powód); ) 

W tym przykładzie stworzyliśmy dwie nowe obietnice: pierwsza, P1, zostanie rozwiązany po 100 milisekundach;
Druga, P2, zostanie odrzucony po 50 milisekundach. Minęliśmy iterację zawierającą obie obietnice jako
jedyny argument Obietnica.wyścig metoda. Jeśli uruchomimy powyższy kod, otrzymamy następujący wynik:

odrzucony!

Co się stało? Zgodnie z oczekiwaniami P2 Obietnica jest pierwszą osiedleniem się (jest odrzucona), w konsekwencji obietnica
zwrócone przez Obietnica.wyścig Metoda, odrzuca z tego samego powodu. Jak widać, stan obietnicy nie jest istotny:
pierwszy, który faktycznie otrzymuje status inny niż aż do to ten, który ma znaczenie.

Wszystko metoda

Tak jak wyścig, Wszystko Metoda przyjmuje iterabinę jako jedyny argument. Zwraca obietnicę, która
rozwiązać, gdy wszystkie obietnice zawarte w iterable rozwiązują (lub gdy iterable nie zawiera obietnic) lub będzie
odrzucić z powodu pierwszej obietnicy w iterabinie, która odrzuci. Na przykład:

const p1 = new o obietnicy (funkcja (rozdzielcz, odrzuć) settimeout (rozdzielcz, 100, 'p1 rozwiązany!'); ) const p2 = new o obietnicy (funkcja (rozdzielcz, odrzuć) settimeout (rozdzielcz, 100, 'p2 rozwiązany!'); ) Obietnica.Wszystkie ([p1, p2]) .następnie (funkcja (wartości) konsola.log (wartości); ) 

Powyższy kod powróci:

['P1 rozwiązane!', „P2 rozwiązany!']

Wszystkie obietnice zawarte w iteracyjnym rozwiązaniu, więc oczekująca obietnica zwrócona przez Wszystko metoda
rozwiązane, a jego wartość jest tablicą zawierającą wartości wszystkich rozwiązanych obietnic. Jeśli jeden (i jak najszybciej) jedna z obietnic
W odrzucach iterowalnych obietnica zwrócona przez metodę odrzuca również z tego samego powodu. Jeśli iterable przekazane jako argument
był pusty, już zwrócona byłaby już obietnica. Gdyby nie zawierał obietnic, metoda powróciłaby
asynchronicznie rozwiązywana obietnica lub już rozwiązana w zależności od środowiska.



rozstrzygać I odrzucić metody

Te dwie metody są objaśniające.

rozstrzygać Metoda przyjmuje argument, który jest wartością, którą należy rozwiązać według obietnicy.
Zwraca obietnicę, która jest rozstrzygnięta z tą wartością. odrzucić Metoda podobnie przyjmuje argument, który jest przyczyną
Obietnica powinna zostać odrzucona i zwraca obietnicę odrzuconą z danym powodem. Na przykład:

// Rozwiązuj obietnicę obietnicy.Resolve („Wartość rozdzielona”); // Odrzuć obietnicę obietnicy.Odrzuć („powód do odrzucenia”); 

Wnioski

W tym samouczku nauczyliśmy się znać i używać obietnic w JavaScript. Widzieliśmy, jak możemy zbudować własne obietnice, jakie są związane metody
z obietnicą i jak możemy go użyć do zarządzania kodem asynchronicznym, jako czystsza alternatywa dla oddzwonienia. Ważne źródło do dalszego zwiększenia
Twoja wiedza na temat obietnic, że jest to ta dostarczona przez Mozillę.
W następnym samouczku JavaScript dowiemy się, jak korzystać Funkcje strzałek. Bądź na bieżąco z Linuxconfig.org!

Powiązane samouczki Linux:

  • Jak zbudować aplikację Tkinter za pomocą obiektu zorientowanego na…
  • Samouczek debugowania GDB dla początkujących
  • Jak pracować z WooCommerce Rest API z Pythonem
  • Wyrażenia regularne Pythona z przykładami
  • Advanced Bash Regex z przykładami
  • Mastering Bash Script Loops
  • Zagnieżdżone pętle w skryptach Bash
  • Jak skonfigurować serwer OpenVPN na Ubuntu 20.04
  • Zainstaluj Arch Linux na stacji roboczej VMware
  • Pętle bash z przykładami