Co to jest asynchroniczny przepływ sterowania w Node.js?

Co To Jest Asynchroniczny Przeplyw Sterowania W Node Js



Przepływ kontroli to sposób wykonywania, w którym wykonywany jest proces znajdujący się w aplikacji. Ten przepływ jest bardzo pomocny, gdy chcesz najpierw wykonać określoną część całego programu lub po zakończeniu losowej metody. Przepływ wykonania jest zwykle ustawiany jako asynchroniczny lub synchroniczny, w zależności od charakteru wykorzystywanej metody.

W tym artykule wyjaśniono działanie i implementację asynchronicznego przepływu sterowania w Node.js.

Co to jest asynchroniczny przepływ sterowania w Node.js?

Asynchroniczny przepływ kontroli w Node.js odnosi się do sposobu zarządzania i kontrolowania przepływu wykonywania podczas operacji asynchronicznych, takich jak wysyłanie żądań sieciowych, obsługa zdarzeń itd. Chociaż Node.js został specjalnie zaprojektowany do pracy asynchronicznej, lepiej jest upewnić się, że określony kod będzie wykonywany w zamierzonej kolejności i skutecznie obsłuży błędy.







Spójrzmy na przykładowy kod, który zwiększy poziom zrozumiałości asynchronicznego przepływu sterowania:



był fsObj = wymagać ( „fs” ) ;
//Abstrakcyjna funkcja wywołania zwrotnego
funkcja readFileAsync ( docelowa ścieżka pliku ) {
powrót nowy Obietnica ( ( rozwiązać, odrzucić ) => {
fsObj. przeczytaj plik ( docelowa ścieżka pliku, „utf-8” , ( błąd, treść ) => {
Jeśli ( błąd ) {
odrzucić ( błąd ) ;
} w przeciwnym razie {
rozstrzygać ( treść ) ;
}
} ) ;
} ) ;
}

// Funkcja umożliwiająca sekwencyjne odczytywanie wielu plików
funkcja asynchroniczna readFileSequentially ( ) {
próbować {
konst plik1Dane = poczekaj na readFileAsync ( „mójnowyplik1.txt” ) ;
konsola. dziennik ( „Dane pierwszego pliku:” , plik1Dane ) ;

konst plik2Dane = poczekaj na readFileAsync ( „usecase.txt” ) ;
konsola. dziennik ( „Dane drugiego pliku:” , plik2Dane ) ;

konst plik3Dane = poczekaj na readFileAsync ( „pakiet.json” ) ;
konsola. dziennik ( „Dane trzeciego pliku:” , plik3Dane ) ;
} złapać ( błąd ) {
konsola. błąd ( „Wystąpił błąd:” , błąd ) ;
}
}

czytaj plik sekwencyjnie ( ) ;

Wyjaśnienie powyższego kodu jest następujące:



  • Najpierw zaimportuj „ fs ” i zapisz jego obiekt w „ fsObj ' zmienny.
  • Następnie zdefiniuj „ czytajPlikAsync() ” nazwana funkcja posiadająca pojedynczy parametr „ docelowa ścieżka pliku ”, który zawiera ścieżkę do docelowego pliku.
  • Ta funkcja zwraca „ obietnica ”, który zawiera wymaganą funkcję wywołania zwrotnego składającą się z dwóch parametrów, a mianowicie „ rozstrzygać ' I ' odrzucić ”.
  • Wewnątrz funkcji wywołania zwrotnego wywołaj „ przeczytajPlik() ” metoda dostarczona przez „ fs moduł. Przekaż także podany parametr „ docelowa ścieżka pliku ” jako pierwszy parametr metody „readFile()”.
  • przeczytaj plik ” zawiera także wymaganą funkcję zwrotną posiadającą parametry „ błąd ' I ' treść ”. Przekaż „ błąd ” w „ odrzucić() ” metoda na wypadek wystąpienia błędów oraz „ treść ” w „ rozstrzygać() ” w przypadku nie znalezienia błędu.
  • Teraz utwórz funkcję asynchroniczną o nazwie „ czytaj plik sekwencyjnie() ” i zawiera „ próbuj złapać ' blok.
  • W środku ' próbować ” utwórz trzy zmienne przechowujące wynik wygenerowany poprzez wywołanie już utworzonego bloku „ czytajPlikAsync() ”funkcja. Za każdym razem ścieżka do żądanego pliku, który ma zostać wykonany, jest przekazywana w nawiasie tej funkcji.
  • Słowo kluczowe „ czekać na ” jest również umieszczany za funkcją w momencie jej wywołania, aby zatrzymać przepływ sterowania do czasu zakończenia akcji czytania pliku.
  • Wyświetl także zmienne na konsoli, aby wyświetlić pobraną lub przeczytaną zawartość pliku.
  • Na koniec wywołaj zawierający „ czytaj plik sekwencyjnie() ”funkcja.

Aby wykonać, umieść powyższy kod w żądanym pliku z rozszerzeniem „ .js ” rezydujący w projekcie Node.js. Głównym plikiem w naszym przypadku jest „ controlFlow.js ”, więc nasze polecenie wykonania będzie wyglądało następująco:





przepływ kontroli węzła. js

Wygenerowane dane wyjściowe pokazują, że dane żądanych plików przy użyciu asynchronicznego przepływu sterowania są wyświetlane w kolejności:



Jakie są możliwe przyczyny i sposoby uniknięcia zablokowanego kodu Node.js?

Kod synchroniczny jest również znany jako „ Kod blokowy ”, ponieważ wstrzymuje wykonywanie procesów do czasu wykonania uruchomionego procesu. Skutkuje to słabą wydajnością i responsywnością aplikacji. Kod blokujący zwykle występuje z powodu operacji synchronicznych lub związanych z procesorem CPU. Możliwe przyczyny blokowania kodu i sposoby ich uniknięcia przedstawiono poniżej w tabeli:

Przyczyny blokowania kodu Rozwiązanie do blokowania kodu
Użycie synchronicznych operacji na plikach, takich jak fs.readFileSync(). Użyj asynchronicznych operacji na plikach, takich jak fs.readFile.
Korzystanie z operacji związanych z procesorem, takich jak ciężkie obliczenia lub długotrwałe pętle. Odciążaj zadania związane z procesorem do wątków roboczych, dzieląc je na mniejsze, nieblokujące się fragmenty.
Powolne żądania sieci zewnętrznej ze względu na użycie żądań HTTP do zdalnych interfejsów API Korzystaj z asynchronicznych bibliotek HTTP, takich jak Axios lub wbudowanych modułów „http” lub „https”.
Niezoptymalizowane zapytania do bazy danych Optymalizuj zapytania do bazy danych, korzystając z narzędzi optymalizacji zapytań dostępnych w bazie danych.
Stosowanie nieskończonych pętli lub ciasnych pętli bez przerw. Upewnij się, że pętle mają warunki wyjściowe i nie działają w nieskończoność.

Wniosek

Asynchroniczny przepływ sterowania wykorzystuje słowa kluczowe „ asynchronicznie/czekaj ” do modyfikowania lub kontrolowania przepływu wykonywania w sposób asynchroniczny. Wywołanie zwrotne wymaganej metody asynchronicznej jest wyodrębniane i przechowywane w osobnej funkcji. Ta funkcja jest następnie wywoływana za pomocą słowa kluczowego Wait w sposób sekwencyjny wraz z innymi metodami, zgodnie z potrzebami. Funkcje te są przechowywane w innej niestandardowej funkcji asynchronicznej, która jest następnie wywoływana w celu rozpoczęcia wykonywania. W tym przewodniku wyjaśniono asynchroniczny przepływ sterowania w Node.js.