Какво е асинхронен контролен поток в Node.js?

Kakvo E Asinhronen Kontrolen Potok V Node Js



Контролният поток е начинът на изпълнение, по който се изпълнява вътрешният процес на вашето приложение. Този поток помага много, когато искате първо да изпълните определена част от цялата програма или след завършването на произволен метод. Потокът на изпълнение обикновено се настройва като асинхронен или синхронен според естеството на метода, който се използва.

Това описание обяснява работата и внедряването на асинхронен контролен поток в Node.js.

Какво е асинхронен контролен поток в Node.js?

Асинхронният контролен поток в Node.js се отнася до начина, по който управлявате и контролирате потока на изпълнение, когато работите с асинхронни операции, като правене на мрежови заявки, обработка на събития и т.н. Въпреки че Node.js е специално проектиран за асинхронен характер, по-добре е да се гарантира, че конкретният код се изпълнява в предвидената последователност и извършва ефективно обработване на грешки.







Нека имаме пример за код, за да подобрим нивото на разбираемост на асинхронния контролен поток:



беше fsObj = изискват ( 'fs' ) ;
//Абстрахирана функция за обратно извикване
функция readFileAsync ( targetFilePath ) {
връщане нов обещание ( ( разрешавам, отхвърлям ) => {
fsObj. readFile ( targetFilePath, 'utf-8' , ( грешка, съдържание ) => {
ако ( грешка ) {
отхвърлям ( грешка ) ;
} друго {
разрешавам ( съдържание ) ;
}
} ) ;
} ) ;
}

// Функция за извършване на последователно четене на множество файлове
асинхронна функция readFileSequentially ( ) {
опитвам {
конст file1Data = изчакайте readFileAsync ( 'mynewfile1.txt' ) ;
конзола. дневник ( „Данни за първи файл:“ , file1Data ) ;

конст file2Data = изчакайте readFileAsync ( 'usecase.txt' ) ;
конзола. дневник ( „Данни за втори файл:“ , file2Data ) ;

конст file3Data = изчакайте readFileAsync ( 'package.json' ) ;
конзола. дневник ( „Данни от третия файл:“ , file3Data ) ;
} улов ( грешка ) {
конзола. грешка ( „Възникнала грешка:“ , грешка ) ;
}
}

readFileSequentially ( ) ;

Обяснението на горния код е както следва:



  • Първо импортирайте „ fs ” модул и съхранява неговия обект в „ fsObj ” променлива.
  • След това дефинирайте „ readFileAsync() ” наречена функция с единствения параметър на „ targetFilePath ”, който съдържа пътя за целевия файл.
  • Тази функция връща „ обещание ”, която съдържа необходимата функция за обратно извикване, състояща се от два параметъра, а именно „ разрешавам ' и ' отхвърлям ”.
  • Във функцията за обратно извикване извикайте „ readFile() “ метод, предоставен от „ fs ” модул. Също така подайте предоставения параметър на „ targetFilePath ” като първи параметър за метода „readFile()”.
  • readFile ' методът също така съдържа необходимата функция за обратно извикване, имаща параметрите на ' грешка ' и ' съдържание ”. Преминете „ грешка ' в ' отхвърлям () ” метод в случай на поява на грешки и „ съдържание ' в ' разреши () ” в случай на неоткрита грешка.
  • Сега създайте асинхронна функция с име „ readFileSequentialy() “ и съдържа „ опитай да хванеш ” блок.
  • Вътре в „ опитвам ', създайте три променливи, съхраняващи резултата, генериран чрез извикване на вече създадения ' readFileAsync() ” функция. Всеки път, когато пътят за желания файл, който трябва да бъде изпълнен, се предава в тази скоба на функцията.
  • Ключовата дума „ чакам ” също се поставя зад функцията по време на извикване, за да спре контролния поток, докато действието по четене на файла не приключи.
  • Освен това покажете променливите на конзолата, за да покажете извлеченото или прочетеното съдържание на файла.
  • И накрая, извикайте съдържащия „ readFileSequentialy() ” функция.

За да изпълните, поставете горепосочения код в желания от вас файл с разширение „ .js ”, който се намира във вашия проект Node.js. Основният файл в нашия случай е „ controlFlow.js ”, така че нашата команда за изпълнение ще бъде както следва:





възел controlFlow. js

Генерираният изход показва, че данните за желаните файлове, използващи асинхронен контролен поток, се показват последователно:



Какви са възможните причини и стъпките за избягване на блокиран код на Node.js?

Синхронният код е известен още като „ Блок код ”, тъй като спира изпълнението на процесите до изпълнението на работещия процес. Това води до лоша производителност и отзивчивост на приложението. Блокиращият код обикновено възниква поради синхронни или свързани с процесора операции. Възможните причини за блокиране на кода и как да ги избегнете са посочени по-долу в таблицата:

Причини за блокиране на код Решение за блокиране на код
Използване на синхронни файлови операции като fs.readFileSync(). Използвайте асинхронни файлови операции като fs.readFile.
Използване на обвързани с процесора операции като тежки изчисления или дълго изпълняващи се цикли. Претоварете свързаните с процесора задачи към работните нишки, като ги разделите на по-малки, неблокиращи части.
Бавни външни мрежови заявки поради използването на HTTP заявки към отдалечени API Използвайте асинхронни HTTP библиотеки като Axios или вградените „http“ или „https“ модули.
Неоптимизирани заявки към база данни Оптимизирайте заявките към базата данни, като използвате инструментите за оптимизиране на заявки, предоставени от базата данни.
Използване на безкрайни цикли или стегнати цикли без прекъсвания. Уверете се, че циклите имат условия за изход и не работят безкрайно.

Заключение

Асинхронният контролен поток използва ключовите думи „ асинхронен/изчакване ”, за да модифицирате или контролирате потока на изпълнение по асинхронен начин. Обратното извикване за необходимия асинхронен метод се абстрахира и съхранява в отделна функция. След това тази функция се извиква с помощта на ключовата дума await по последователен начин заедно с други методи по желание. Тези функции се съхраняват в друга персонализирана асинхронна функция, която след това се извиква, за да започне изпълнението. Това ръководство обяснява потока на асинхронно управление в Node.js.