Node.js — Цикл подій

21

Від автора: Сьогодні ми поговоримо про те, для чого потрібні в Node js події. Node.js — однопотоковий додаток, але воно може підтримувати паралелізм через концепцію подій і зворотних викликів. Кожен API-інтерфейс Node.js є асинхронним і однопоточним, він використовує асинхронні виклики функцій для підтримки паралелізму. Node використовує шаблон проектування Спостерігача. Потік Node підтримує цикл подій, і кожен раз по завершенню завдання, він запускає відповідну подію, яка сигналізує про виконання функції прослушивателя події.

Програмування на основі подій

В Node.js часто використовуються події, і це також одна з причин, по якій Node.js досить швидкий у порівнянні з іншими подібними технологіями. Після запуску сервера Node, в ньому просто ініціюються власні змінні оголошуються функції, а потім Node починає чекати події.

В додатку, на основі подій, зазвичай існує основний цикл, який прослуховує події, а потім запускає функцію зворотного виклику при виявленні одного з цих подій.

Node.js — Цикл подій

Хоча події дуже схожі на зворотні дзвінки, різниця між ними полягає в тому, що функції зворотного виклику викликаються, коли асинхронна функція повертає результат, тоді як обробка подій виконується у відповідності з шаблоном Спостерігача. Функції, які відстежують події, що працюють як Спостерігачі. При кожному запуску події починає виконуватися його функція-слухач. Node.js містить кілька вбудованих подій, доступних через модуль подій і клас EventEmitter, які використовуються для прив’язки подій і прослушивателей подій наступним чином:

// Імпорт модуля подій
var events = require(‘events’);
// Створення об’єкта eventEmitter
var eventEmitter = new events.EventEmitter();

Нижче наведено синтаксис прив’язки обробника події до події:

// Прив’язка до події обробника події
eventEmitter.on(‘eventName’, eventHandler);

Ми можемо запустити подія програмно наступним чином:

// Запуск події
eventEmitter.emit(‘eventName’);

Приклад

Створіть файл з ім’ям js main.js з таким кодом:

// Імпорт модуля подій
var events = require(‘events’);
// Створення об’єкта eventEmitter
var eventEmitter = new events.EventEmitter();
// Створення обробника подій
var connectHandler = function connected() {
console.log(‘connection succesful.’);
// Запуск події data_received
eventEmitter.emit(‘data_received’);
}
// Прив’язка обробника події до події
eventEmitter.on(‘connection’, connectHandler);
// Прив’язка події data_received до анонімної функції
eventEmitter.on(‘data_received’, function(){
console.log(‘data received succesfully.’);
});
// Запуск події connection
eventEmitter.emit(‘connection’);
console.log(«Program Ended.»);

Тепер спробуємо запустити наведену вище програму:

$ node main.js

В результаті ми отримаємо наступне:

connection successful.
received data successfully.
Program Ended.

Як працюють програми Node?

У додатку на Node будь асинхронна функція приймає зворотний виклик в якості останнього параметра, а функція зворотного виклику приймає помилку в якості першого параметра. Повернемося до попереднього прикладу. Створіть текстовий файл з ім’ям input.txt з наступним вмістом.

Tutorials Point is giving self-learning content
to teach the world in simple and easy way!!!!!

Створіть файл з ім’ям js main.js містить наступний код:

var fs = require(«fs»);
fs.readFile(‘input.txt’, function (err, data) {
if (err){
console.log(err.stack);
return;
}
console.log(data.toString());
});
console.log(«Program Ended»);

Тут fs.readFile() — це асинхронна функція, яка повинна зчитувати файл. Якщо під час операції читання виникає помилка, об’єкт err буде містити відповідну помилку, інакше зчитується вміст файлу. readFile передає err і дані у функцію зворотного виклику після завершення операції читання, яка виводить вміст.

Program Ended
Tutorials Point is giving self-learning content
to teach the world in simple and easy way!!!!!