Was ist asynchroner Kontrollfluss in Node.js?

Was Ist Asynchroner Kontrollfluss In Node Js



Der Kontrollfluss ist die Ausführungsart, mit der der in Ihrer Anwendung enthaltene Prozess ausgeführt wird. Dieser Ablauf ist sehr hilfreich, wenn Sie einen bestimmten Teil des gesamten Programms zuerst oder nach Abschluss einer Zufallsmethode ausführen möchten. Der Ausführungsablauf wird normalerweise je nach Art der verwendeten Methode asynchron oder synchron eingestellt.

In diesem Artikel wird die Funktionsweise und Implementierung des asynchronen Kontrollflusses in Node.js erläutert.

Was ist asynchroner Kontrollfluss in Node.js?

Der asynchrone Kontrollfluss in Node.js bezieht sich auf die Art und Weise, wie Sie den Ausführungsfluss verwalten und steuern, wenn Sie asynchrone Vorgänge bearbeiten, z. B. Netzwerkanfragen stellen, Ereignisse verarbeiten usw. Obwohl Node.js speziell für einen asynchronen Charakter konzipiert ist, ist es besser sicherzustellen, dass der spezifische Code in der vorgesehenen Reihenfolge ausgeführt wird und eine effektive Fehlerbehandlung durchführt.







Lassen Sie uns ein Codebeispiel verwenden, um die Verständlichkeit des asynchronen Kontrollflusses zu verbessern:



war fsObj = erfordern ( 'fs' ) ;
//Abstrahierte Callback-Funktion
Funktion readFileAsync ( targetFilePath ) {
zurückkehren neu Versprechen ( ( lösen, ablehnen ) => {
fsObj. readFile ( targetFilePath, 'utf-8' , ( Fehler, Inhalt ) => {
Wenn ( Fehler ) {
ablehnen ( Fehler ) ;
} anders {
lösen ( Inhalt ) ;
}
} ) ;
} ) ;
}

// Funktion zum Ausführen mehrerer Dateilesevorgänge nacheinander
asynchrone Funktion readFileSequentially ( ) {
versuchen {
const file1Data = warte auf readFileAsync ( 'meineneuedatei1.txt' ) ;
Konsole. Protokoll ( 'Erste Dateidaten:' , Datei1Daten ) ;

const file2Data = warte auf readFileAsync ( 'usecase.txt' ) ;
Konsole. Protokoll ( 'Zweite Dateidaten:' , file2Data ) ;

const file3Data = warte auf readFileAsync ( 'Paket.json' ) ;
Konsole. Protokoll ( 'Dritte Dateidaten:' , file3Data ) ;
} fangen ( Fehler ) {
Konsole. Fehler ( „Aufgetretener Fehler:“ , Fehler ) ;
}
}

readFileSequentially ( ) ;

Die Erklärung des obigen Codes lautet wie folgt:



  • Importieren Sie zunächst „ fs ”-Modul und speichern Sie sein Objekt im „ fsObj ” variabel.
  • Definieren Sie dann ein „ readFileAsync() ” benannte Funktion mit dem einzelnen Parameter „ targetFilePath „, das den Pfad für eine Zieldatei enthält.
  • Diese Funktion gibt ein „ versprechen „, das die erforderliche Callback-Funktion enthält, die aus zwei Parametern besteht, nämlich „ lösen ' Und ' ablehnen “.
  • Rufen Sie innerhalb der Callback-Funktion die „ readFile() ” Methode bereitgestellt von der „ fs ” Modul. Übergeben Sie außerdem den bereitgestellten Parameter „ targetFilePath ” als ersten Parameter für die Methode „readFile()“.
  • Der ' readFile Die Methode enthält auch die erforderliche Rückruffunktion mit den Parametern „ Fehler ' Und ' Inhalt “. Übergeben Sie das „ Fehler ” in die „ ablehnen() ” Methode bei Auftreten von Fehlern und „ Inhalt ” in die „ lösen() ”-Methode für den Fall, dass kein Fehler gefunden wird.
  • Erstellen Sie nun eine asynchrone Funktion mit dem Namen „ readFileSequentialy() “ und es enthält ein „ versuchen/fangen ' Block.
  • Innerhalb der „ versuchen ”-Block, erstellen Sie drei Variablen, die das Ergebnis speichern, das durch Aufrufen des bereits erstellten „ readFileAsync() ” Funktion. Jedes Mal wird der Pfad für die gewünschte Datei, die ausgeführt werden muss, in dieser Funktionsklammer übergeben.
  • Das Schlüsselwort „ erwarten ” wird zum Zeitpunkt des Aufrufs auch hinter der Funktion platziert, um den Kontrollfluss zu stoppen, bis der Vorgang des Lesens der Datei abgeschlossen ist.
  • Zeigen Sie außerdem die Variablen auf der Konsole an, um den abgerufenen oder gelesenen Dateiinhalt anzuzeigen.
  • Rufen Sie abschließend das enthaltende „ readFileSequentialy() ” Funktion.

Platzieren Sie zum Ausführen den oben genannten Code in der gewünschten Datei mit der Erweiterung „ .js ” befindet sich in Ihrem Node.js-Projekt. Die Hauptdatei in unserem Fall ist „ controlFlow.js “, also wird unser Ausführungsbefehl wie folgt lauten:





Knoten controlFlow. js

Die generierte Ausgabe zeigt, dass die Daten für gewünschte Dateien mithilfe des asynchronen Kontrollflusses nacheinander angezeigt werden:



Was sind die möglichen Ursachen und Vermeidungsschritte für blockierten Node.js-Code?

Der synchrone Code ist auch bekannt als „ Blockcode ” da es die Ausführung von Prozessen bis zur Ausführung des laufenden Prozesses anhält. Dies führt zu einer schlechten Anwendungsleistung und Reaktionsfähigkeit. Blockierender Code tritt typischerweise aufgrund synchroner oder CPU-gebundener Vorgänge auf. Die möglichen Ursachen für das Blockieren von Code und wie man sie vermeidet, sind unten in der Tabelle aufgeführt:

Ursachen für Codeblockierung Lösung für Code-Blockierung
Verwendung synchroner Dateioperationen wie fs.readFileSync(). Verwenden Sie asynchrone Dateioperationen wie fs.readFile.
Verwendung CPU-gebundener Vorgänge wie umfangreiche Berechnungen oder lang laufende Schleifen. Verlagern Sie CPU-gebundene Aufgaben auf Arbeitsthreads, indem Sie sie in kleinere, nicht blockierende Blöcke aufteilen.
Langsame externe Netzwerkanfragen aufgrund der Verwendung von HTTP-Anfragen an Remote-APIs Verwenden Sie asynchrone HTTP-Bibliotheken wie Axios oder die integrierten „http“- oder „https“-Module.
Nicht optimierte Datenbankabfragen Optimieren Sie Datenbankabfragen mithilfe der von der Datenbank bereitgestellten Tools zur Abfrageoptimierung.
Verwendung von Endlosschleifen oder engen Schleifen ohne Pausen. Stellen Sie sicher, dass Schleifen Beendigungsbedingungen haben und nicht unendlich ausgeführt werden.

Abschluss

Der asynchrone Kontrollfluss verwendet die Schlüsselwörter „ asynchron/warten ” um den Ausführungsfluss auf asynchrone Weise zu ändern oder zu steuern. Der Rückruf für die erforderliche asynchrone Methode wird abstrahiert und in einer separaten Funktion gespeichert. Diese Funktion wird dann mit Hilfe des Schlüsselworts „await“ nacheinander zusammen mit anderen Methoden nach Wunsch aufgerufen. Diese Funktionen werden in einer anderen benutzerdefinierten asynchronen Funktion gespeichert, die dann aufgerufen wird, um die Ausführung zu starten. In diesem Leitfaden wurde der asynchrone Kontrollfluss in Node.js erläutert.