Ce este fluxul de control asincron în Node.js?

Ce Este Fluxul De Control Asincron In Node Js



Fluxul de control este modul de execuție în care este executat procesul rezident al aplicației dvs. Acest flux ajută foarte mult atunci când doriți să executați o anumită parte a întregului program mai întâi sau după finalizarea unei metode aleatorii. Fluxul de execuție este de obicei setat în asincron sau sincron în funcție de natura metodei care este utilizată.

Acest articol explică funcționarea și implementarea fluxului de control asincron în Node.js.

Ce este fluxul de control asincron în Node.js?

Fluxul de control asincron în Node.js se referă la modul în care gestionați și controlați fluxul de execuție atunci când aveți de-a face cu operațiuni asincrone, cum ar fi efectuarea de solicitări de rețea, gestionarea evenimentelor și așa mai departe. Deși Node.js este conceput special pentru o natură asincronă, este mai bine să vă asigurați că codul specific se execută în secvența dorită și efectuează gestionarea erorilor în mod eficient.







Să avem un exemplu de cod pentru a îmbunătăți nivelul de înțelegere al fluxului de control asincron:



a fost fsObj = cere ( „fs” ) ;
//Funcția de apel inversă abstractă
funcția readFileAsync ( targetFilePath ) {
întoarcere nou Promisiune ( ( rezolva, respinge ) => {
fsObj. readFile ( targetFilePath, „utf-8” , ( eroare, continut ) => {
dacă ( eroare ) {
respinge ( eroare ) ;
} altfel {
rezolva ( conţinut ) ;
}
} ) ;
} ) ;
}

// Funcție pentru a efectua mai multe citiri de fișiere în secvență
funcția asincronă readFileSequentially ( ) {
încerca {
const fișier1Date = așteptați readFileAsync ( „mynewfile1.txt” ) ;
consolă. Buturuga ( „Datele primului fișier:” , fișier1Date ) ;

const file2Data = așteptați readFileAsync ( „usecase.txt” ) ;
consolă. Buturuga ( „Date al doilea fișier:” , file2Data ) ;

const file3Data = așteptați readFileAsync ( „package.json” ) ;
consolă. Buturuga ( „Al treilea fișier de date:” , file3Data ) ;
} captură ( eroare ) {
consolă. eroare ( „Eroare apărută:” , eroare ) ;
}
}

readFileSequentially ( ) ;

Explicația codului de mai sus este următoarea:



  • Mai întâi, importați „ fs ” și stocați obiectul său în „ fsObj ' variabil.
  • Apoi, definiți un „ readFileAsync() „funcție numită având un singur parametru „ targetFilePath ” care conține calea pentru un fișier vizat.
  • Această funcție returnează un „ promisiune ” care conține funcția de apel invers necesară constând din doi parametri și anume “ rezolva ' și ' respinge ”.
  • În interiorul funcției de apel invers, invocați „ readFile() ” metoda oferită de “ fs ” modulul. De asemenea, treceți parametrul furnizat „ targetFilePath ” ca prim parametru pentru metoda „readFile()”.
  • readFile metoda conține, de asemenea, funcția de apel invers necesară având parametrii „ eroare ' și ' conţinut ”. Treceți „ eroare ' în ' respinge() metoda ” în cazul apariției unor erori și ” conţinut ' în ' rezolva() ” metoda în caz de eroare negăsită.
  • Acum, creați o funcție asincronă numită „ readFileSequentily() ” și conține un „ încearcă să prinzi ' bloc.
  • În interiorul ' încerca ” bloc, creați trei variabile care stochează rezultatul generat prin invocarea „ deja creat” readFileAsync() ”funcție. De fiecare dată, calea pentru fișierul dorit care trebuie executat este trecută în această paranteză a funcției.
  • Cuvântul cheie „ asteapta ” este de asemenea plasat în spatele funcției în momentul invocării pentru a opri fluxul de control până la finalizarea acțiunii de citire a fișierului.
  • De asemenea, afișați variabilele pe consolă pentru a afișa conținutul fișierului preluat sau citit.
  • În cele din urmă, invocați textul care conține „ readFileSequentily() ”funcție.

Pentru a executa, plasați codul menționat mai sus în fișierul dorit, având extensia „ .js ” care se află în interiorul proiectului dvs. Node.js. Dosarul principal în cazul nostru este „ controlFlow.js ”, deci comanda noastră de execuție va fi după cum urmează:





nodul controlFlow. js

Ieșirea generată arată că datele pentru fișierele dorite folosind fluxul de control asincron sunt afișate în secvență:



Care sunt cauzele posibile și pașii de evitare pentru codul blocat Node.js?

Codul sincron este cunoscut și sub numele de „ Cod de blocare ” deoarece oprește execuția proceselor până la execuția procesului în execuție. Acest lucru are ca rezultat o performanță și o capacitate de răspuns slabe ale aplicației. Codul de blocare apare de obicei din cauza operațiunilor sincrone sau legate de CPU. Posibilele cauze ale blocării codului și cum să le evitați sunt menționate mai jos în tabel:

Cauze pentru blocarea codului Soluție pentru blocarea codului
Utilizarea operațiunilor de fișiere sincrone, cum ar fi fs.readFileSync(). Utilizați operațiuni asincrone cu fișiere, cum ar fi fs.readFile.
Utilizarea operațiunilor legate de CPU, cum ar fi calcule grele sau bucle de lungă durată. Descărcați sarcinile legate de CPU către firele de lucru, împărțindu-le în bucăți mai mici, neblocante.
Solicitări lente de rețea externă din cauza utilizării solicitărilor HTTP către API-urile de la distanță Utilizați biblioteci HTTP asincrone precum Axios sau modulele încorporate „http” sau „https”.
Interogări de baze de date neoptimizate Optimizați interogările bazei de date utilizând instrumentele de optimizare a interogărilor furnizate de baza de date.
Utilizarea buclelor infinite sau a buclelor strânse fără pauze. Asigurați-vă că buclele au condiții de ieșire și nu rulează la infinit.

Concluzie

Fluxul de control asincron utilizează cuvintele cheie „ asincron/așteaptă ” pentru a modifica sau controla fluxul de execuție într-o manieră asincronă. Callback-ul pentru metoda asincronă necesară este extrasă și stocată într-o funcție separată. Această funcție este apoi invocată cu ajutorul cuvântului cheie await într-o manieră secvențială împreună cu alte metode după cum se dorește. Aceste funcții sunt stocate într-o altă funcție asincronă personalizată care este apoi invocată pentru a începe execuția. Acest ghid a explicat fluxul de control asincron în Node.js.