Hva er asynkron kontrollflyt i Node.js?

Hva Er Asynkron Kontrollflyt I Node Js



Kontrollflyten er utførelsesmåten der den gjenværende prosessen til applikasjonen din blir utført. Denne flyten hjelper mye når du ønsker å utføre en bestemt del av hele programmet først eller etter fullføring av en tilfeldig metode. Utførelsesflyten er vanligvis satt i asynkron eller synkron i henhold til typen av metoden som brukes.

Denne oppskriften forklarer arbeidet og implementeringen av asynkron kontrollflyt i Node.js.

Hva er asynkron kontrollflyt i Node.js?

Asynkron kontrollflyt i Node.js refererer til måten du administrerer og kontrollerer utførelsesflyten på når du arbeider med asynkrone operasjoner, for eksempel å lage nettverksforespørsler, håndtere hendelser og så videre. Selv om Node.js er spesielt designet for en asynkron natur, er det bedre å sikre at den spesifikke koden kjøres i den tiltenkte sekvensen og utfører feilhåndtering effektivt.







La oss ha et kodeeksempel for å forbedre nivået av forståelse av asynkron kontrollflyt:



 var fsObj = krever ( 'fs' ) ;
//Abstrakt tilbakeringingsfunksjon
funksjon readFileAsync ( targetFilePath ) {
komme tilbake ny Love ( ( løse, avvise ) => {
fsObj. lesefil ( targetFilePath, 'utf-8' , ( feil, innhold ) => {
hvis ( feil ) {
avvise ( feil ) ;
} ellers {
Løse ( innhold ) ;
}
} ) ;
} ) ;
}

// Funksjon for å utføre flere filer i rekkefølge
asynkronfunksjon readFileSequentially ( ) {
prøve {
konst fil1Data = vent readFileAsync ( 'minnyfil1.txt' ) ;
konsoll. Logg ( 'Første fildata:' , fil1Data ) ;

konst fil2data = vent readFileAsync ( 'usecase.txt' ) ;
konsoll. Logg ( 'Andre fildata:' , fil2data ) ;

konst file3Data = vent readFileAsync ( 'package.json' ) ;
konsoll. Logg ( 'Tredje fildata:' , fil3Data ) ;
} å fange ( feil ) {
konsoll. feil ( 'Oppstått feil:' , feil ) ;
}
}

readFileSequentially ( ) ;

Forklaringen av koden ovenfor er som følger:



  • Først importerer du ' fs '-modulen og lagre objektet i ' fsObj variabel.
  • Definer deretter en ' readFileAsync() ' navngitt funksjon som har enkeltparameteren ' targetFilePath ' som inneholder banen for en målrettet fil.
  • Denne funksjonen returnerer en ' love ' som inneholder den nødvendige tilbakeringingsfunksjonen bestående av to parametere, nemlig ' Løse ' og ' avvise '.
  • Inne i tilbakeringingsfunksjonen, påkall ' readFile() ' metode levert av ' fs ' modul. Send også den angitte parameteren for ' targetFilePath ' som den første parameteren for 'readFile()'-metoden.
  • « lesefil ”-metoden inneholder også den nødvendige tilbakeringingsfunksjonen med parametrene til ” feil ' og ' innhold '. Send meg ' feil ' inn i det ' avvise() ' metode i tilfelle feil og ' innhold ' inn i det ' Løse() ”-metoden i tilfelle ingen funnet feil.
  • Lag nå en asynkron funksjon kalt ' readFileSequentialy() ' og den inneholder en ' prøve/fange ' blokk.
  • Inne i ' prøve '-blokk, lag tre variabler som lagrer resultatet generert ved å påkalle den allerede opprettede ' readFileAsync() ' funksjon. Hver gang banen for den ønskede filen som må kjøres sendes innenfor denne funksjonsparentesen.
  • Nøkkelordet ' avvente ” er også plassert bak funksjonen på tidspunktet for påkalling for å stoppe kontrollflyten til handlingen med å lese filen er fullført.
  • Vis også variablene på konsollen for å vise det hentede eller leste filinnholdet.
  • Til slutt påkaller du den som inneholder ' readFileSequentialy() ' funksjon.

For å utføre, plasser den ovenfor angitte koden i ønsket fil med utvidelsen ' .js ” som ligger i ditt Node.js-prosjekt. Hovedmappen i vår sak er ' controlFlow.js ”, så vår utførelseskommando vil være som følger:





nodekontrollFlow. js

Den genererte utgangen viser at dataene for ønskede filer ved bruk av asynkron kontrollflyt vises i rekkefølge:



Hva er de mulige årsakene og unnvikelsestrinnene for blokkert Node.js-kode?

Den synkrone koden er også kjent som ' Blokker kode ” ettersom den stopper utførelsen av prosesser til utførelsen av den kjørende prosessen. Dette resulterer i dårlig applikasjonsytelse og respons. Blokkeringskode oppstår vanligvis på grunn av synkrone eller CPU-bundne operasjoner. De mulige årsakene til kodeblokkering og hvordan du unngår dem er angitt nedenfor i tabellen:

Årsaker til kodeblokkering Løsning for kodeblokkering
Bruk av synkrone filoperasjoner som fs.readFileSync(). Bruk asynkrone filoperasjoner som fs.readFile.
Bruk av CPU-bundne operasjoner som tunge beregninger eller langvarige looper. Last CPU-bundne oppgaver til arbeidertråder ved å dele dem opp i mindre, ikke-blokkerende biter.
Trege eksterne nettverksforespørsler på grunn av bruk av HTTP-forespørsler til eksterne APIer Bruk asynkrone HTTP-biblioteker som Axios eller de innebygde 'http'- eller 'https'-modulene.
Uoptimaliserte databasespørringer Optimaliser databasespørringer ved å bruke spørringsoptimaliseringsverktøyene fra databasen.
Bruk av uendelige løkker eller tette løkker uten pauser. Sørg for at løkker har utgangsforhold og ikke går uendelig.

Konklusjon

Den asynkrone kontrollflyten bruker nøkkelordene ' asynkron/avvent ' for å modifisere eller kontrollere flyten av utførelse på en asynkron måte. Tilbakekallingen for den nødvendige asynkrone metoden abstraheres og lagres i en egen funksjon. Denne funksjonen påkalles deretter ved hjelp av vent nøkkelordet på en sekvensiell måte sammen med andre metoder etter ønske. Disse funksjonene lagres i en annen tilpasset asynkron funksjon som deretter aktiveres for å starte utførelsen. Denne veiledningen har forklart den asynkrone kontrollflyten i Node.js.