Z tego, co zrozumiałem, istnieją trzy sposoby wywoływania kodu asynchronicznego:
- Wydarzenia, np
request.on("event", callback);
- Callback, np
fs.open(path, flags, mode, callback);
- Obietnice
Znalazłem bibliotekę z obietnicą węzłów, ale jej nie rozumiem.
Czy ktoś mógłby wyjaśnić, o co chodzi w obietnicach i dlaczego powinienem ich używać?
Dlaczego został usunięty z Node.js?
javascript
node.js
promise
ajsie
źródło
źródło
Odpowiedzi:
Obietnice w node.js obiecywały wykonanie jakiejś pracy, a następnie miały oddzielne wywołania zwrotne, które byłyby wykonywane w przypadku sukcesu i niepowodzenia, a także obsługi limitów czasu. Innym sposobem myślenia o obietnicach w node.js było to, że były to emitery, które mogły emitować tylko dwa zdarzenia: sukces i błąd.
Fajną rzeczą w obietnicach jest to, że można je łączyć w łańcuchy zależności (obietnice C należy wykonywać tylko po ukończeniu Obietnic A i Obietnic B).
Usuwając je z rdzenia node.js, stworzył możliwość budowania modułów z różnymi implementacjami obietnic, które mogą znajdować się na szczycie rdzenia. Niektóre z nich to obietnica węzłów i przyszłość .
źródło
Ponieważ to pytanie wciąż ma wiele poglądów (takich jak moje), chciałem zwrócić uwagę, że:
źródło
Obietnica to „rzecz”, która reprezentuje „ostateczne” rezultaty operacji, że tak powiem. Należy tu zauważyć, że usuwa szczegóły, kiedy coś się dzieje i pozwala skupić się na tym, co powinno się wydarzyć po tym, jak coś się wydarzy. Spowoduje to czysty, możliwy do utrzymania kod, w którym zamiast wywołania zwrotnego w wywołaniu zwrotnym wewnątrz wywołania zwrotnego, Twój kod będzie wyglądał mniej więcej tak:
Specyfikacja obietnic mówi, że obietnica jest
metoda powinna zwrócić nową obietnicę, która jest spełniona, gdy dane wywołanie zwrotne successHandler lub failureHandler zostanie zakończone. Oznacza to, że możesz łączyć obietnice w łańcuchy, gdy masz zestaw asynchronicznych zadań, które należy wykonać, i mieć pewność, że sekwencjonowanie operacji jest gwarantowane tak, jakbyś używał wywołań zwrotnych. Więc zamiast przekazywać wywołanie zwrotne w wywołaniu zwrotnym w wywołaniu zwrotnym, kod z powiązanymi obietnicami wygląda następująco:
Aby dowiedzieć się więcej o obietnicach i dlaczego są super fajne, odwiedź blog Domenica: http://domenic.me/2012/10/14/youre-missing-the-point-of-promises/
źródło
Ten nowy samouczek na temat Promises od autora PouchDB jest prawdopodobnie najlepszym, jaki kiedykolwiek widziałem. Mądrze obejmuje klasyczne błędy debiutanta, pokazując prawidłowe wzorce użycia, a nawet kilka anty-wzorców, które są nadal powszechnie używane - nawet w innych samouczkach !!
Cieszyć się!
PS Nie odpowiedziałem na inne części tego pytania, ponieważ zostały one dobrze omówione przez innych.
źródło
Mike Taulty ma serię filmów , z których każdy zajmuje mniej niż dziesięć minut, opisujących sposób działania biblioteki WinJS Promise.
Te filmy są dość pouczające, a Mike'owi udaje się pokazać moc Promise API za pomocą kilku dobrze dobranych przykładów kodu.
Sposób traktowania wyjątków jest szczególnie dobry.
Pomimo odniesień do WinJs, jest to seria filmów o ogólnym zainteresowaniu, ponieważ Promise API jest zasadniczo podobny w wielu jego implementacjach.
RSVP to lekka implementacja Promise, która przechodzi pomyślnie zestaw testów Promise / A +. Bardzo podoba mi się interfejs API, ponieważ jest podobny stylem do interfejsu WinJS.
Aktualizacja kwiecień 2014
Nawiasem mówiąc, biblioteka WinJS jest teraz open source .
źródło
deferreds
iresolve
ideferred.promise.then
ipromiseActions
w popularnej dokumentacji biblioteki Q. Czy jest szansa, że znasz coś tak prostego dla Node.js ?Kolejną zaletą obietnic jest to, że obsługa błędów oraz zgłaszanie i przechwytywanie wyjątków jest znacznie lepsza niż próba obsłużenia tego za pomocą wywołań zwrotnych.
The Bluebird biblioteka implementuje obietnice i daje wielkie ślady długo stos, jest bardzo szybki, i ostrzega o błędach Uncaught. Jest również szybszy i zużywa mniej pamięci niż inne biblioteki obiecujące, zgodnie z http://bluebirdjs.com/docs/benchmarks.html
źródło
Czym dokładnie jest obietnica?
Obietnica to po prostu obiekt, który reprezentuje wynik operacji asynchronicznej. Obietnica może mieć dowolny z trzech następujących stanów:
w toku :: To jest stan początkowy, co oznacza, że obietnica nie została spełniona ani odrzucona.
spełnione : Oznacza to, że obietnica została spełniona, oznacza to, że wartość, którą reprezentuje obietnica, jest gotowa do użycia.
odrzucone :: Oznacza to, że operacje się nie powiodły i dlatego nie mogą spełnić obietnicy. Oprócz państw istnieją trzy ważne podmioty związane z obietnicami, które naprawdę musimy zrozumieć
executor function :: executor function definiuje operację asynchroniczną, która ma zostać wykonana i której wynik jest reprezentowany przez obietnicę. Rozpoczyna się wykonywanie zaraz po zainicjowaniu obiektu obietnicy.
olve :: solution to parametry przekazane do funkcji wykonawczej, aw przypadku pomyślnego uruchomienia modułu wykonawczego to rozwiązanie jest nazywane przekazaniem wyniku.
odrzucanie :: odrzucanie to kolejny parametr przekazywany do funkcji executora i jest on używany, gdy funkcja executora zawodzi. Przyczyna niepowodzenia może zostać przekazana odrzuceniu.
Więc za każdym razem, gdy tworzymy obiekt obietnicy, musimy zapewnić wykonanie, rozwiązanie i odrzucenie.
Odniesienie :: Obietnice
źródło
Ostatnio przyglądałem się również obietnicom w node.js. Do tej pory wydawało się, że when.js jest właściwą drogą ze względu na szybkość i wykorzystanie zasobów, ale dokumentacja dotycząca q.js dała mi dużo lepsze zrozumienie. Więc użyj when.js, ale q.js docs, aby zrozumieć temat.
Z pliku q.js readme na github:
źródło
Obiekt Promise reprezentuje zakończenie lub niepowodzenie operacji asynchronicznej.
Aby zrealizować obietnicę, potrzebujesz dwóch części: -
1. Tworzenie obietnicy:
2. Obietnica obsługi:
źródło