Samouczek dotyczący obietnicy Node.js.

Spisie treści:

Anonim

W poprzednich samouczkach można było zobaczyć funkcje wywołania zwrotnego, które są używane w przypadku zdarzeń asynchronicznych. Ale czasami funkcje zwrotne mogą stać się koszmarem, gdy zaczynają się zagnieżdżać, a program zaczyna być długi i złożony.

W tym samouczku nauczysz się:

  • Co to są obietnice?
  • Odwołania do obietnic
  • Radzenie sobie z zagnieżdżonymi obietnicami
  • Tworzenie niestandardowej obietnicy

Co to są obietnice?

Zanim zaczniemy od obietnic, przyjrzyjmy się najpierw, czym są funkcje „wywołania zwrotnego” w Node.js. Wiele razy widzieliśmy te funkcje wywołania zwrotnego w poprzednich rozdziałach, więc przejrzyjmy szybko jeden z nich.

Poniższy przykład przedstawia fragment kodu, który służy do łączenia się z bazą danych MongoDB i wykonywania operacji aktualizacji na jednym z rekordów w bazie danych.

  1. W powyższym kodzie część funkcji (err, db) jest znana jako deklaracja funkcji anonimowej lub funkcji zwrotnej. Gdy MongoClient utworzy połączenie z bazą danych MongoDB, powróci do funkcji wywołania zwrotnego po zakończeniu operacji połączenia. W pewnym sensie operacje połączenia odbywają się w tle, a po zakończeniu wywołuje naszą funkcję zwrotną. Pamiętaj, że jest to jeden z kluczowych punktów Node.js, aby umożliwić jednoczesne wykonywanie wielu operacji, a tym samym nie blokować żadnego użytkownika przed wykonaniem operacji.

  2. Drugi blok kodu jest tym, co jest wykonywane, gdy faktycznie wywoływana jest funkcja zwrotna. Funkcja wywołania zwrotnego aktualizuje tylko jeden rekord w naszej bazie danych MongoDB.

Więc czym jest obietnica? Cóż, obietnica to tylko ulepszenie funkcji wywołań zwrotnych w Node.js. W trakcie cyklu rozwojowego może zaistnieć potrzeba zagnieżdżenia wielu funkcji zwrotnych razem. W pewnym momencie może to stać się trochę niechlujne i trudne do utrzymania. Krótko mówiąc, obietnica to ulepszenie wywołań zwrotnych, które ma na celu złagodzenie tych problemów.

Podstawową składnię obietnicy przedstawiono poniżej;

var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
  • „doSomethingAync” to dowolne wywołanie zwrotne lub funkcja asynchroniczna, która wykonuje pewnego rodzaju przetwarzanie.
  • Tym razem podczas definiowania wywołania zwrotnego zwracana jest wartość zwana „obietnicą”.
  • Zwracana obietnica może mieć 2 wyjścia. Określa to klauzula „then”. Każda operacja może zakończyć się sukcesem, co jest oznaczone parametrem „onFulfilled”. Lub może mieć błąd oznaczony parametrem „onRejected”.

Uwaga: Tak więc kluczowym aspektem obietnicy jest wartość zwracana. Nie ma pojęcia wartości zwracanej podczas pracy z normalnymi wywołaniami zwrotnymi w Node.js. Ze względu na wartość zwracaną mamy większą kontrolę nad tym, jak można zdefiniować funkcję zwrotną.

W następnym temacie zobaczymy przykład obietnic i korzyści płynące z wywołań zwrotnych.

Odwołania do obietnic

Spójrzmy teraz na przykład, jak możemy używać „obietnic” z poziomu aplikacji Node.js. Aby korzystać z obietnic w aplikacji Node.js, należy najpierw pobrać i zainstalować moduł „obietnica”.

Następnie zmodyfikujemy nasz kod, jak pokazano poniżej, który zaktualizuje Nazwę pracownika w kolekcji „Pracownik” za pomocą obietnic.

Krok 1) Instalacja modułów NPM

Aby korzystać z Promises z poziomu aplikacji Node JS, wymagany jest moduł promise. Aby zainstalować moduł obietnicy, uruchom poniższe polecenie

npm obietnica instalacji

Krok 2) Zmodyfikuj kod, aby zawierał obietnice

var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(err, db) {db.collection('Employee').updateOne({"EmployeeName": "Martin"}, {$set: {"EmployeeName": "Mohan"}});});

Objaśnienie kodu: -

  1. Pierwsza część ma zawierać moduł „promise”, który pozwoli nam korzystać z funkcji promise w naszym kodzie.
  2. Możemy teraz dołączyć funkcję „then” do naszej funkcji MongoClient.connect. Więc to, co to robi, to to, że kiedy nawiązywane jest połączenie z bazą danych, musimy wykonać zdefiniowany później fragment kodu.
  3. Na koniec definiujemy fragment kodu, który aktualizuje EmployeeName pracownika o nazwisku „Martin” na „Mohan”.

Uwaga:-

Jeśli teraz sprawdzisz zawartość bazy danych MongoDB, zobaczysz, że jeśli istnieje rekord o nazwie EmployeeName o wartości „Martin”, zostanie on zaktualizowany do „Mohan”.

Aby sprawdzić, czy dane zostały poprawnie wstawione do bazy danych, musisz wykonać następujące polecenia w MongoDB

  1. Użyj EmployeeDB
  2. db.Employee.find ({EmployeeName: Mohan})

Pierwsza instrukcja zapewnia połączenie z bazą danych EmployeeDb. Druga instrukcja wyszukuje rekord, który zawiera nazwisko pracownika „Mohan”.

Radzenie sobie z zagnieżdżonymi obietnicami

Definiując obietnice, należy zauważyć, że sama metoda „wtedy” zwraca obietnicę. W pewnym sensie obietnice można zagnieżdżać lub łączyć ze sobą.

W poniższym przykładzie używamy łańcucha do zdefiniowania 2 funkcji zwrotnych, z których obie wstawiają rekord do bazy danych MongoDB.

( Uwaga : łańcuch to koncepcja używana do łączenia wykonywania metod ze sobą. Załóżmy, że Twoja aplikacja ma 2 metody o nazwie „metodaA” i „metodaB”. Logika była taka, że ​​„metodaB” powinna być wywoływana po „metodaA”, wtedy można połączyć wykonanie w taki sposób, że „methodB” zostanie wywołana bezpośrednio po „methodA”).

Kluczową rzeczą, na którą należy zwrócić uwagę w tym przykładzie, jest to, że kod staje się bardziej przejrzysty, czytelny i łatwy w utrzymaniu dzięki zastosowaniu zagnieżdżonych obietnic.

var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(db) {db.collection('Employee').insertOne({Employeeid: 4,EmployeeName: "NewEmployee"}).then(function(db1) {db1.collection('Employee').insertOne({Employeeid: 5,EmployeeName: "NewEmployee1"})})});

Objaśnienie kodu: -

  1. Definiujemy teraz 2 klauzule „then”, które są wykonywane jedna po drugiej. W pierwszej klauzuli then przekazujemy parametr „db”, który zawiera nasze połączenie z bazą danych. Następnie używamy właściwości collection połączenia „db”, aby wstawiać rekordy do kolekcji „Pracownik”. Metoda „insertOne” służy do wstawienia faktycznego dokumentu do kolekcji Employee.
  2. Jesteśmy następnie za pomocą 2 nd klauzuli wówczas także, aby wstawić nowy rekord do bazy danych.

Jeśli teraz sprawdzisz zawartość bazy danych MongoDB, znajdziesz 2 rekordy wstawione do bazy danych MongoDB.

Tworzenie niestandardowej obietnicy

Niestandardową obietnicę można utworzyć za pomocą modułu węzłowego o nazwie „q”. Bibliotekę „q” należy pobrać i zainstalować za pomocą menedżera pakietów węzłów. Po użyciu biblioteki 'q' można wywołać metodę „denodeify”, która spowoduje, że każda funkcja stanie się funkcją zwracającą obietnicę.

W poniższym przykładzie utworzymy prostą funkcję o nazwie „Dodaj”, która doda 2 liczby. Przekonwertujemy tę funkcję na funkcję zwracającą obietnicę.

Gdy to zrobimy, użyjemy obietnicy zwróconej przez funkcję Add do wyświetlenia komunikatu w console.log.

Wykonajmy poniższe kroki, aby utworzyć naszą niestandardową funkcję zwracającą obietnicę.

Krok 1) Instalacja modułów NPM

Aby użyć „q” z poziomu aplikacji Node JS, wymagany jest moduł „q”. Aby zainstalować moduł „q”, uruchom poniższe polecenie

npm install q

Krok 2) Zdefiniuj następujący kod, który zostanie użyty do utworzenia niestandardowej obietnicy.

Objaśnienie kodu: -

  1. Pierwszym bitem jest dołączenie biblioteki „q” za pomocą słowa kluczowego require. Korzystając z tej biblioteki, będziemy mogli zdefiniować dowolną funkcję zwracającą wywołanie zwrotne.
  2. Tworzymy funkcję o nazwie Add, która doda 2 liczby zdefiniowane w zmiennych a i b. Suma tych wartości będzie przechowywana w zmiennej c.
  3. Następnie używamy biblioteki q do denodeify (metoda używana do konwersji dowolnej funkcji na funkcję, która zwróciłaby obietnicę) naszej funkcji Add lub w inny sposób konwertuje naszą funkcję Add na funkcję, która zwraca obietnicę.
  4. Teraz wywołujemy naszą funkcję „Add” i jesteśmy w stanie uzyskać wartość obietnicy zwrotu z powodu poprzedniego kroku, który wykonaliśmy, polegającego na denodeifikacji funkcji Add.
  5. Użyte jest słowo kluczowe „then”, określające, że jeśli funkcja zostanie wykonana pomyślnie, należy wyświetlić ciąg „Funkcja dodawania zakończona” w pliku console.log.

Po uruchomieniu powyższego kodu w pliku console.log zostanie wyświetlone dane wyjściowe „Dodatkowa funkcja zakończona”, jak pokazano poniżej.

Podsumowanie

  • Używanie funkcji zwrotnych w Node.js ma swoje wady. Czasami w trakcie tworzenia oprogramowania zagnieżdżone użycie funkcji zwrotnych może sprawić, że kod będzie bardziej bałaganiarski i trudny w utrzymaniu.
  • Większość problemów z zagnieżdżonymi funkcjami zwrotnymi można złagodzić za pomocą obietnic i generatorów w node.js
  • Obietnica to wartość zwracana przez funkcję asynchroniczną w celu wskazania zakończenia przetwarzania wykonywanego przez funkcję asynchroniczną.
  • Obietnice można zagnieżdżać w sobie nawzajem, aby kod wyglądał lepiej i był łatwiejszy do utrzymania, gdy funkcja asynchroniczna musi zostać wywołana po innej funkcji asynchronicznej