Това описание обяснява работата и внедряването на асинхронен контролен поток в 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.