Ovaj zapis objašnjava rad i implementaciju asinkronog toka kontrole u Node.js.
Što je asinkroni kontrolni tok u Node.js?
Asinkroni tijek kontrole u Node.js odnosi se na način na koji upravljate i kontrolirate tijek izvršenja kada se bavite asinkronim operacijama, kao što je postavljanje mrežnih zahtjeva, rukovanje događajima i tako dalje. Iako je Node.js posebno dizajniran za asinkronu prirodu, bolje je osigurati da se određeni kod izvršava u predviđenom slijedu i učinkovito rješava pogreške.
Uzmimo primjer koda za povećanje razine razumljivosti asinkronog toka upravljanja:
bio je fsObj = zahtijevati ( 'fs' ) ;
//Apstraktna funkcija povratnog poziva
funkcija readFileAsync ( targetFilePath ) {
povratak novi Obećanje ( ( riješiti, odbaciti ) => {
fsObj. readFile ( targetFilePath, 'utf-8' , ( greška, sadržaj ) => {
ako ( greška ) {
odbiti ( greška ) ;
} drugo {
odlučnost ( sadržaj ) ;
}
} ) ;
} ) ;
}
// Funkcija za izvođenje višestrukih uzastopnih čitanja datoteka
asinkrona funkcija readFileSequentially ( ) {
probati {
konst file1Data = čekaj readFileAsync ( 'moja novadatoteka1.txt' ) ;
konzola. log ( 'Podaci prve datoteke:' , datoteka1Podaci ) ;
konst file2Data = čekaj readFileAsync ( 'usecase.txt' ) ;
konzola. log ( 'Podaci druge datoteke:' , datoteka2Podaci ) ;
konst file3Data = čekaj readFileAsync ( 'package.json' ) ;
konzola. log ( 'Podaci treće datoteke:' , datoteka3Podaci ) ;
} ulov ( greška ) {
konzola. greška ( 'Dogodila se pogreška:' , pogreška ) ;
}
}
readFileSequentially ( ) ;
Objašnjenje gornjeg koda je sljedeće:
- Prvo uvezite ' fs ” i pohranite njegov objekt u „ fsObj ” varijabla.
- Zatim definirajte ' readFileAsync() ” imenovana funkcija koja ima jedan parametar od „ targetFilePath ” koji sadrži stazu za ciljanu datoteku.
- Ova funkcija vraća ' obećanje ” koja sadrži traženu funkciju povratnog poziva koja se sastoji od dva parametra, naime “ odlučnost ' i ' odbiti ”.
- Unutar funkcije povratnog poziva pozovite ' readFile() ' metoda koju pruža ' fs ” modul. Također, proslijedite navedeni parametar ' targetFilePath ” kao prvi parametar za metodu “readFile()”.
- ' readFile ' metoda također sadrži potrebnu funkciju povratnog poziva koja ima parametre ' greška ' i ' sadržaj ”. Prođi ' greška ' u ' odbiti() ” metoda u slučaju pojave grešaka i “ sadržaj ' u ' odlučnost() ” metoda u slučaju da greška nije pronađena.
- Sada stvorite asinkronu funkciju pod nazivom ' ReadFileSequentialy() ' i sadrži ' pokušaj uhvatiti ' blok.
- Unutar ' probati ', kreirajte tri varijable koje pohranjuju rezultat generiran pozivanjem već stvorenog ' readFileAsync() ” funkcija. Svaki put kada se staza za željenu datoteku koju treba izvršiti prosljeđuje unutar ove zagrade funkcije.
- Ključna riječ ' čekati ” također se nalazi iza funkcije u trenutku pozivanja da se zaustavi kontrolni tok dok se radnja čitanja datoteke ne završi.
- Također, prikažite varijable na konzoli za prikaz dohvaćenog ili pročitanog sadržaja datoteke.
- Na kraju, pozovite sadržaj koji sadrži ' ReadFileSequentialy() ” funkcija.
Kako biste izvršili, postavite gore navedeni kod u željenu datoteku s ekstenzijom ' .js ” koja se nalazi unutar vašeg Node.js projekta. Glavna datoteka u našem slučaju je ' controlFlow.js ”, pa će naša naredba za izvršenje biti sljedeća:
kontrola protoka čvora. js
Generirani izlaz pokazuje da se podaci za željene datoteke pomoću asinkronog kontrolnog toka prikazuju u nizu:
Koji su mogući uzroci i koraci za izbjegavanje blokiranog koda Node.js?
Sinkroni kod je također poznat kao ' Blokiraj kod ” jer zaustavlja izvršavanje procesa do izvršenja procesa koji se izvodi. To rezultira lošim performansama i odzivom aplikacije. Kôd za blokiranje obično se događa zbog sinkronih operacija ili operacija povezanih s procesorom. Mogući uzroci blokiranja koda i kako ih izbjeći navedeni su dolje u tablici:
Uzroci blokiranja koda | Rješenje za blokiranje koda |
Upotreba sinkronih operacija datoteka poput fs.readFileSync(). | Koristite asinkrone operacije datoteka poput fs.readFile. |
Korištenje CPU vezanih operacija kao što su teška izračunavanja ili dugotrajne petlje. | Zadatke vezane za CPU preopteretiti radničkim nitima njihovim razbijanjem na manje dijelove koji ne blokiraju. |
Spori vanjski mrežni zahtjevi zbog upotrebe HTTP zahtjeva udaljenim API-jima | Koristite asinkrone HTTP biblioteke kao što je Axios ili ugrađene 'http' ili 'https' module. |
Neoptimizirani upiti baze podataka | Optimizirajte upite baze podataka pomoću alata za optimizaciju upita koje pruža baza podataka. |
Korištenje beskonačnih petlji ili uskih petlji bez prekida. | Osigurajte da petlje imaju izlazne uvjete i da ne rade beskonačno. |
Zaključak
Asinkroni kontrolni tijek koristi ključne riječi ' asinkroni/čekaj ” za modificiranje ili kontrolu tijeka izvršenja na asinkroni način. Povratni poziv za traženu asinkronu metodu je apstrahiran i pohranjen u zasebnoj funkciji. Ova funkcija se zatim poziva uz pomoć ključne riječi čekanja na sekvencijalni način zajedno s drugim metodama po želji. Te su funkcije pohranjene u drugoj prilagođenoj asinkronoj funkciji koja se zatim poziva za početak izvršenja. Ovaj vodič objašnjava asinkroni tok kontrole u Node.js.