Kas yra asinchroninis valdymo srautas Node.js?

Kas Yra Asinchroninis Valdymo Srautas Node Js



Valdymo srautas yra vykdymo būdas, kuriuo vykdomas esamas jūsų programos procesas. Šis srautas labai padeda, kai pirmiausia norite vykdyti tam tikrą visos programos dalį arba užbaigę atsitiktinį metodą. Vykdymo srautas paprastai nustatomas asinchroniškai arba sinchroniškai, atsižvelgiant į naudojamo metodo pobūdį.

Šiame rašte paaiškinamas asinchroninio valdymo srauto veikimas ir įgyvendinimas Node.js.

Kas yra asinchroninis valdymo srautas Node.js?

Asinchroninis valdymo srautas Node.js reiškia, kaip valdote ir valdote vykdymo srautą, kai atliekate asinchronines operacijas, pvz., teikiate tinklo užklausas, tvarkote įvykius ir pan. Nors Node.js yra specialiai sukurtas asinchroniniam veikimui, geriau užtikrinti, kad konkretus kodas būtų vykdomas numatyta seka ir veiksmingai tvarkytų klaidas.







Pateikiame kodo pavyzdį, kad pagerintume asinchroninio valdymo srauto supratimo lygį:



buvo fsObj = reikalauti ( 'fs' ) ;
//Abstrahuota atgalinio skambinimo funkcija
funkcija readFileAsync ( targetFilePath ) {
grąžinti naujas Pažadas ( ( išspręsti, atmesti ) => {
fsObj. skaityti failą ( targetFilePath, 'utf-8' , ( klaida, turinys ) => {
jeigu ( klaida ) {
atmesti ( klaida ) ;
} Kitas {
išspręsti ( turinys ) ;
}
} ) ;
} ) ;
}

// Funkcija atlikti kelių failų nuskaitymą iš eilės
async funkcija readFileSequentially ( ) {
bandyti {
konst failas1 duomenys = laukite readFileAsync ( „mano naujas failas1.txt“ ) ;
konsolė. žurnalas ( „Pirmieji failo duomenys:“ , failas1Duomenys ) ;

konst file2Data = laukite readFileAsync ( „usecase.txt“ ) ;
konsolė. žurnalas ( 'Antrojo failo duomenys:' , file2Data ) ;

konst failas3 duomenys = laukite readFileAsync ( „package.json“ ) ;
konsolė. žurnalas ( „Trečiojo failo duomenys:“ , failas3 duomenys ) ;
} sugauti ( klaida ) {
konsolė. klaida ( „Įvyko klaida:“ , klaida ) ;
}
}

skaityti failą nuosekliai ( ) ;

Aukščiau pateikto kodo paaiškinimas yra toks:



  • Pirmiausia importuokite „ fs “ modulį ir išsaugokite jo objektą „ fsObj “ kintamasis.
  • Tada apibrėžkite „ readFileAsync() ' pavadinta funkcija, turinti vieną parametrą ' targetFilePath “, kuriame yra tikslinio failo kelias.
  • Ši funkcija grąžina „ pažadas “, kurioje yra reikalinga atgalinio ryšio funkcija, susidedanti iš dviejų parametrų, būtent „ išspręsti “ ir „ atmesti “.
  • Atskambinimo funkcijoje iškvieskite „ skaityti failą () “ metodas, kurį pateikė „ fs “ modulis. Taip pat perduokite pateiktą parametrą „ targetFilePath “ kaip pirmąjį metodo „readFile()“ parametrą.
  • skaityti failą “ metodas taip pat turi reikiamą atgalinio skambinimo funkciją, kurios parametrai yra „ klaida “ ir „ turinys “. Praeikite „ klaida ' į ' atmesti () “ metodas, jei atsiranda klaidų ir „ turinys ' į ' išspręsti () “ metodą, jei klaida nerasta.
  • Dabar sukurkite asinchroninę funkciją pavadinimu ' readFileSequentialy() “ ir jame yra „ pabandyti/pagauti “ blokas.
  • Viduje ' bandyti ' bloką, sukurkite tris kintamuosius, išsaugodami rezultatą, sugeneruotą iškviečiant jau sukurtą ' readFileAsync() ' funkcija. Kiekvieną kartą, kai norimo failo, kurį reikia vykdyti, kelias perduodamas šios funkcijos skliausteliuose.
  • Raktažodis ' laukti “ taip pat yra už funkcijos iškvietimo metu, kad sustabdytų valdymo srautą, kol bus baigtas failo skaitymo veiksmas.
  • Be to, konsolėje rodykite kintamuosius, kad būtų rodomas gauto arba skaityto failo turinys.
  • Galiausiai iškvieskite esantį „ readFileSequentialy() ' funkcija.

Norėdami vykdyti, įdėkite aukščiau nurodytą kodą į norimą failą, kurio plėtinys yra ' .js “, esantis jūsų Node.js projekte. Mūsų atveju pagrindinis failas yra „ controlFlow.js “, todėl mūsų vykdymo komanda bus tokia:





mazgo valdymo srautas. js

Sugeneruota išvestis rodo, kad norimų failų duomenys naudojant asinchroninį valdymo srautą rodomi seka:



Kokios yra galimos Node.js užblokuoto kodo priežastys ir vengimo veiksmai?

Sinchroninis kodas taip pat žinomas kaip ' Blokavimo kodas “, nes sustabdo procesų vykdymą iki vykdomo proceso vykdymo. Tai lemia prastą programos našumą ir reagavimą. Blokavimo kodas paprastai atsiranda dėl sinchroninių arba su procesoriaus susijusių operacijų. Galimos kodo blokavimo priežastys ir kaip jų išvengti pateiktos žemiau esančioje lentelėje:

Kodo blokavimo priežastys Kodo blokavimo sprendimas
Sinchroninių failų operacijų, pvz., fs.readFileSync() naudojimas. Naudokite asinchronines failų operacijas, pvz., fs.readFile.
Su CPU susijusių operacijų, pvz., sunkių skaičiavimų ar ilgai veikiančių kilpų, naudojimas. Perkelkite su procesoriaus susijusias užduotis į darbuotojų gijas, suskaidydami jas į mažesnes, neblokuojančias dalis.
Lėtos išorinio tinklo užklausos dėl HTTP užklausų naudojimo nuotolinėms API Naudokite asinchronines HTTP bibliotekas, pvz., „Axios“, arba įtaisytuosius „http“ arba „https“ modulius.
Neoptimizuotos duomenų bazės užklausos Optimizuokite duomenų bazės užklausas naudodami duomenų bazės teikiamus užklausų optimizavimo įrankius.
Begalinių kilpų arba siaurų kilpų naudojimas be pertraukų. Įsitikinkite, kad kilpos turi išėjimo sąlygas ir neveikia be galo.

Išvada

Asinchroninis valdymo srautas naudoja raktinius žodžius ' async/laukti “ keisti arba valdyti vykdymo eigą asinchroniniu būdu. Reikalingo asinchroninio metodo atgalinis skambutis yra abstrahuojamas ir saugomas atskiroje funkcijoje. Tada ši funkcija iškviečiama naudojant laukimo raktinį žodį nuosekliai kartu su kitais metodais, jei pageidaujama. Šios funkcijos saugomos kitoje tinkintoje asinchroninėje funkcijoje, kuri vėliau iškviečiama norint pradėti vykdyti. Šiame vadove paaiškintas asinchroninis valdymo srautas Node.js.