Wat is asynchrone controlestroom in Node.js?

Wat Is Asynchrone Controlestroom In Node Js



De controlestroom is de manier van uitvoering waarin het verblijfsproces van uw applicatie wordt uitgevoerd. Deze stroom helpt veel als u eerst een specifiek deel van het hele programma wilt uitvoeren of na het voltooien van een willekeurige methode. De uitvoeringsstroom wordt gewoonlijk asynchroon of synchroon ingesteld, afhankelijk van de aard van de methode die wordt gebruikt.

In dit artikel wordt de werking en implementatie van asynchrone controlestroom in Node.js uitgelegd.

Wat is asynchrone controlestroom in Node.js?

Asynchrone controlestroom in Node.js verwijst naar de manier waarop u de uitvoeringsstroom beheert en controleert bij het omgaan met asynchrone bewerkingen, zoals het doen van netwerkverzoeken, het afhandelen van gebeurtenissen, enzovoort. Hoewel Node.js specifiek is ontworpen voor een asynchrone aard, is het beter om ervoor te zorgen dat de specifieke code in de beoogde volgorde wordt uitgevoerd en de foutafhandeling effectief uitvoert.







Laten we een codevoorbeeld geven om het begrijpelijkheidsniveau van de asynchrone besturingsstroom te verbeteren:



was fsObj = vereisen ( 'fs' ) ;
//Abstracte callback-functie
functie readFileAsync ( doelbestandspad ) {
opbrengst nieuw Belofte ( ( oplossen, afwijzen ) => {
fsObj. leesBestand ( doelBestandspad, 'utf-8' , ( fout, inhoud ) => {
als ( fout ) {
afwijzen ( fout ) ;
} anders {
oplossen ( inhoud ) ;
}
} ) ;
} ) ;
}

// Functie om meerdere bestanden achter elkaar te lezen
asynchrone functie readFileSequentially ( ) {
poging {
const bestand1Gegevens = wacht op readFileAsync ( 'mijnnieuwebestand1.txt' ) ;
troosten. loggen ( 'Eerste bestandsgegevens:' , bestand1Gegevens ) ;

const bestand2Data = wacht op readFileAsync ( 'usecase.txt' ) ;
troosten. loggen ( 'Tweede bestandsgegevens:' , bestand2Data ) ;

const bestand3Data = wacht op readFileAsync ( 'pakket.json' ) ;
troosten. loggen ( 'Derde bestandsgegevens:' , bestand3Data ) ;
} vangst ( fout ) {
troosten. fout ( 'Optreden fout:' , fout ) ;
}
}

leesBestandOpeenvolgend ( ) ;

De uitleg van de bovenstaande code is als volgt:



  • Importeer eerst de “ fs ”-module en sla het object op in de “ fsObj Variabel.
  • Definieer vervolgens een “ readFileAsync() ' benoemde functie met de enkele parameter ' doelbestandspad ”die het pad voor een gericht bestand bevat.
  • Deze functie retourneert een “ belofte 'die de vereiste callback-functie bevat die uit twee parameters bestaat, namelijk' oplossen ' En ' afwijzen ”.
  • Roep binnen de callback-functie de “ leesBestand() 'methode aangeboden door de' fs ”module. Geef ook de opgegeven parameter “ doelbestandspad ” als de eerste parameter voor de “readFile()”-methode.
  • De ' leesBestand ”-methode bevat ook de vereiste callback-functie met de parameters van “ fout ' En ' inhoud ”. Geef de ' fout ' in de ' afwijzen() 'methode bij het optreden van fouten en' inhoud ' in de ' oplossen() ”-methode als er geen fout wordt gevonden.
  • Maak nu een asynchrone functie met de naam “ readFileSequentieel() ' en het bevat een ' proberen te vangen ” blok.
  • Binnen in de ' poging ” blok, maak drie variabelen waarin het resultaat wordt opgeslagen dat is gegenereerd door het aanroepen van het reeds gemaakte “ readFileAsync() ” functie. Elke keer dat het pad voor het gewenste bestand dat moet worden uitgevoerd, tussen deze functiehaakjes wordt doorgegeven.
  • Het trefwoord “ wachten ” wordt ook achter de functie geplaatst op het moment van aanroepen om de besturingsstroom te stoppen totdat de actie van het lezen van het bestand is voltooid.
  • Geef ook de variabelen op de console weer om de opgehaalde of gelezen bestandsinhoud weer te geven.
  • Roep ten slotte de bevattende “ readFileSequentieel() ” functie.

Om uit te voeren plaatst u de bovengenoemde code in het gewenste bestand met de extensie “ .js ” die zich in uw Node.js-project bevindt. Het hoofdbestand in ons geval is “ controlFlow.js ”, dus ons uitvoeringscommando zal als volgt zijn:





knooppunt controlFlow. js

De gegenereerde uitvoer laat zien dat de gegevens voor gewenste bestanden met behulp van een asynchrone besturingsstroom in volgorde worden weergegeven:



Wat zijn de mogelijke oorzaken en vermijdingsstappen voor geblokkeerde code door Node.js?

De synchrone code staat ook bekend als “ Blokcode 'Omdat het de uitvoering van processen stopt tot de uitvoering van het lopende proces. Dit resulteert in slechte applicatieprestaties en reactievermogen. Blokkeercode treedt doorgaans op als gevolg van synchrone of CPU-gebonden bewerkingen. De mogelijke oorzaken van codeblokkering en hoe u deze kunt vermijden, vindt u hieronder in de tabel:

Oorzaken voor codeblokkering Oplossing voor codeblokkering
Gebruik van synchrone bestandsbewerkingen zoals fs.readFileSync(). Gebruik asynchrone bestandsbewerkingen zoals fs.readFile.
Gebruik van CPU-gebonden bewerkingen zoals zware berekeningen of langlopende lussen. Verplaats CPU-gebonden taken naar werkthreads door ze op te splitsen in kleinere, niet-blokkerende delen.
Trage externe netwerkverzoeken vanwege het gebruik van HTTP-verzoeken naar externe API's Gebruik asynchrone HTTP-bibliotheken zoals Axios of de ingebouwde ‘http’- of ‘https’-modules.
Niet-geoptimaliseerde databasequery's Optimaliseer databasequery's met behulp van de query-optimalisatietools die door de database worden geleverd.
Gebruik van oneindige lussen of strakke lussen zonder pauzes. Zorg ervoor dat lussen exitvoorwaarden hebben en niet oneindig doorlopen.

Conclusie

De asynchrone controlestroom maakt gebruik van de trefwoorden “ asynchroon/wachten ”om de uitvoeringsstroom op een asynchrone manier te wijzigen of te controleren. De callback voor de vereiste asynchrone methode wordt geabstraheerd en opgeslagen in een aparte functie. Deze functie wordt vervolgens op een sequentiële manier aangeroepen met behulp van het trefwoord await, samen met desgewenst andere methoden. Deze functies worden opgeslagen in een andere aangepaste asynchrone functie die vervolgens wordt aangeroepen om de uitvoering te starten. In deze handleiding wordt de asynchrone besturingsstroom in Node.js uitgelegd.