Ano ang Asynchronous Control Flow sa Node.js?

Ano Ang Asynchronous Control Flow Sa Node Js



Ang control flow ay ang paraan ng pagpapatupad kung saan ang naninirahan na proseso ng iyong aplikasyon ay maipapatupad. Malaki ang naitutulong ng daloy na ito kapag gusto mong magsagawa muna ng isang partikular na bahagi ng buong programa o pagkatapos ng pagkumpleto ng isang random na paraan. Ang daloy ng pagpapatupad ay karaniwang nakatakda sa asynchronous o kasabay ayon sa likas na katangian ng pamamaraang ginagamit.

Ipinapaliwanag ng write-up na ito ang pagtatrabaho at pagpapatupad ng asynchronous control flow sa Node.js.

Ano ang Asynchronous Control Flow sa Node.js?

Ang asynchronous na daloy ng kontrol sa Node.js ay tumutukoy sa paraan ng iyong pamamahala at pagkontrol sa daloy ng pagpapatupad kapag nakikitungo sa mga asynchronous na operasyon, tulad ng paggawa ng mga kahilingan sa network, paghawak ng mga kaganapan, at iba pa. Bagama't ang Node.js ay partikular na idinisenyo para sa isang asynchronous na kalikasan, mas mabuting tiyakin na ang partikular na code ay gumagana sa nilalayong pagkakasunud-sunod at gumaganap ng mabisang paghawak ng error.







Magkaroon tayo ng isang halimbawa ng code upang mapahusay ang antas ng pagkaunawa ng asynchronous na daloy ng kontrol:



ay fsObj = nangangailangan ( 'fs' ) ;
//Abstracted Callback Function
function na readFileAsync ( targetFilePath ) {
bumalik bago Pangako ( ( lutasin, tanggihan ) => {
fsObj. readFile ( targetFilePath, 'utf-8' , ( error, nilalaman ) => {
kung ( pagkakamali ) {
tanggihan ( pagkakamali ) ;
} iba pa {
lutasin ( nilalaman ) ;
}
} ) ;
} ) ;
}

// Function na magsagawa ng maraming mga file na nabasa nang magkakasunod
async function na readFileSequentially ( ) {
subukan {
const file1Data = hintayin ang readFileAsync ( 'mynewfile1.txt' ) ;
console. log ( 'Unang Data ng File:' , file1Data ) ;

const file2Data = hintayin ang readFileAsync ( 'usecase.txt' ) ;
console. log ( 'Ikalawang Data ng File:' , file2Data ) ;

const file3Data = hintayin ang readFileAsync ( 'package.json' ) ;
console. log ( 'Ikatlong Data ng File:' , file3Data ) ;
} mahuli ( pagkakamali ) {
console. pagkakamali ( 'Naganap na Error:' , pagkakamali ) ;
}
}

readFileSequentially ( ) ;

Ang paliwanag ng code sa itaas ay ang mga sumusunod:



  • Una, i-import ang ' fs ” module at iimbak ang bagay nito sa “ fsObj ” variable.
  • Pagkatapos, tukuyin ang isang ' readFileAsync() ' pinangalanang function na mayroong isang parameter ng ' targetFilePath ” na naglalaman ng landas para sa isang naka-target na file.
  • Ang function na ito ay nagbabalik ng ' pangako ” na naglalaman ng kinakailangang callback function na binubuo ng dalawang parameter na “ lutasin 'at' tanggihan ”.
  • Sa loob ng callback function, i-invoke ang “ readFile() 'paraang ibinigay ng ' fs ” modyul. Gayundin, ipasa ang ibinigay na parameter ng ' targetFilePath ” bilang unang parameter para sa pamamaraang “readFile()”.
  • Ang ' readFile Ang paraan ng ” ay naglalaman din ng kinakailangang function ng callback na mayroong mga parameter ng “ pagkakamali 'at' nilalaman ”. Ipasa ang ' pagkakamali 'sa' tanggihan() 'paraan kung sakaling magkaroon ng mga pagkakamali at ' nilalaman 'sa' lutasin() ” paraan kung sakaling walang nakitang error.
  • Ngayon, lumikha ng isang asynchronous function na pinangalanang ' readFileSequentialy() ” at naglalaman ito ng “ subukan/huli ” block.
  • Sa loob ng ' subukan ” block, lumikha ng tatlong variable na nag-iimbak ng resulta na nabuo sa pamamagitan ng pagtawag sa nalikha na “ readFileAsync() ” function. Sa bawat oras na ang path para sa nais na file na kailangang isagawa ay ipinapasa sa loob ng function na panaklong.
  • Ang keyword na ' maghintay ” ay inilalagay din sa likod ng function sa oras ng pag-invoke upang ihinto ang daloy ng kontrol hanggang sa makumpleto ang pagkilos ng pagbabasa ng file.
  • Gayundin, ipakita ang mga variable sa console upang ipakita ang nakuha o nabasa na nilalaman ng file.
  • Panghuli, tawagan ang naglalaman ng ' readFileSequentialy() ” function.

Upang maisakatuparan, ilagay ang nakasaad sa itaas na code sa iyong nais na file na may extension na ' .js ” na naninirahan sa loob ng iyong proyekto sa Node.js. Ang pangunahing file sa aming kaso ay ' controlFlow.js ”, kaya ang aming utos sa pagpapatupad ay magiging ganito:





node controlFlow. js

Ang nabuong output ay nagpapakita na ang data para sa mga gustong file gamit ang asynchronous control flow ay ipinapakita sa pagkakasunud-sunod:



Ano ang Mga Posibleng Dahilan at Mga Hakbang sa Pag-iwas para sa Na-block na Code ng Node.js?

Ang synchronous code ay kilala rin bilang “ Block Code ” habang pinipigilan nito ang pagsasagawa ng mga proseso hanggang sa pagsasagawa ng tumatakbong proseso. Nagreresulta ito sa hindi magandang pagganap ng application at pagtugon. Karaniwang nangyayari ang blocking code dahil sa mga kasabay o CPU-bound na operasyon. Ang mga posibleng dahilan ng pagharang ng code at kung paano maiiwasan ang mga ito ay nakasaad sa ibaba sa talahanayan:

Mga sanhi ng Pag-block ng Code Solusyon para sa Pag-block ng Code
Paggamit ng mga kasabay na pagpapatakbo ng file tulad ng fs.readFileSync(). Gumamit ng mga asynchronous na pagpapatakbo ng file tulad ng fs.readFile.
Paggamit ng mga operasyong nakatali sa CPU tulad ng mabibigat na pag-compute o matagal na pagtakbo. I-offload ang mga gawaing nakagapos sa CPU sa mga thread ng manggagawa sa pamamagitan ng paghahati-hati sa mga ito sa mas maliliit at hindi nakaharang na mga tipak.
Mabagal na mga kahilingan sa panlabas na network dahil sa paggamit ng mga kahilingan sa HTTP sa mga malalayong API Gumamit ng mga asynchronous na HTTP library tulad ng Axios o ang built-in na 'http' o 'https' na mga module.
Hindi na-optimize na mga query sa database I-optimize ang mga query sa database gamit ang mga tool sa pag-optimize ng query na ibinigay ng database.
Paggamit ng walang katapusan na mga loop o masikip na mga loop na walang mga break. Tiyakin na ang mga loop ay may mga kundisyon sa paglabas at hindi tatakbo nang walang hanggan.

Konklusyon

Ang asynchronous control flow ay gumagamit ng mga keyword na ' async/naghihintay ” upang baguhin o kontrolin ang daloy ng pagpapatupad sa isang asynchronous na paraan. Ang callback para sa kinakailangang asynchronous na pamamaraan ay na-abstract at nakaimbak sa isang hiwalay na function. Ang function na ito ay pagkatapos ay i-invoke sa tulong ng naghihintay na keyword sa sunud-sunod na paraan kasama ng iba pang mga pamamaraan ayon sa ninanais. Ang mga function na ito ay naka-imbak sa isa pang custom na asynchronous na function na pagkatapos ay ini-invoke upang simulan ang pagpapatupad. Ipinaliwanag ng gabay na ito ang asynchronous control flow sa Node.js.