Объект EventEmitter в Node.js
Все мы знаем, что приложения NodeJ запускаются в однопоточной модели, управляемой событиями. Однако NodeJs выполняет пул потоков в фоновом режиме приложения, а приложения не поддерживают многопоточность.
Все это возможно с использованием модели событий в NodeJs. В этой статье мы увидим объект EventEmitter и то, как он создает событие и запускает его. Но вы должны знать, что это за событие.
Обработка событий очень похожа на функцию обратного вызова, но функция обратного вызова используется, когда асинхронные функции возвращают свой результат, а обработка событий работает по шаблону наблюдателя. В NodeJ функции, которые прослушивают события, называются наблюдателями. Когда происходит событие, функции прослушивателя начинают свое выполнение. В NodeJ доступно несколько встроенных событий, таких как класс EventEmitter. Мы покажем, как мы можем использовать класс EventEmitter для обработки событий.
EventEmitter — это встроенное событие, доступное в NodeJs. Большая часть основного API Node.js построена на идиоматической асинхронной управляемой событиями архитектуре, в которой определенные виды объектов (называемые «эмиттерами») генерируют именованные события, вызывающие вызов объектов-функций («слушателей»)». EventEmitter помогает генераторам событий запускать события и слушателей, чтобы действовать на эти события простым способом.
Создание объекта EventEmitter: мы можем использовать EventEmitter, создав его объект, а затем используя его для событий пожара. Мы будем использовать синтаксис для создания объекта EventEmitter. Перед созданием объекта EventEmitter вы должны импортировать событие.
Шаг 1: Импортируйте модуль событий.
var events = require("events");
Шаг 2: Создает объект EventEmitter.
var eventEmitter = new events.EventEmitter();
Шаг 3: Затем свяжите событие и обработчик событий вместе
eventEmitter.on("eventName", eventHandler);
Шаг 4: Мы можем запустить событие, используя метод emit
eventEmitter.emit("eventName");
Пример 1: В этом примере мы показываем, как создать объект EventEmitter. а затем запустите событие с помощью метода emit() и привяжите использование соединения on() для EventEmitter. Когда выполнение остановлено, мы запускаем соединения с помощью emit().
index.js
Javascript
// Import events module var events = require( "events" ); // Create an eventEmitter object var eventEmitter = new events.EventEmitter() // Create an event handler as follows var connectHandler = function connected() { console.log( "connection successful." ); // Fire the data_received event eventEmitter.emit( "data_received" ); } // Bind the connection event with the handler eventEmitter.on( "connection" , connectHandler); // Bind the data_received event with the anonymous function eventEmitter.on( "data_received" , function () { console.log( "data received successfully." ); }); // Fire the connection event eventEmitter.emit( "connection" ); console.log( "Program Ended." ); |
Шаг для запуска приложения: выполните приведенную ниже команду, чтобы выполнить script.js.
node script.js
Выход:
Расширение класса EventEmitter: класс EventEmitter поддерживает наследование. Иногда вам нужно реализовать подкласс EventEmitter.
Пример 2: В этом примере MyEmitter наследует класс EventEmitter. MyEmitter использует метод on() для прослушивания событий. Это событие срабатывает с использованием emit() .
index.js
Javascript
const EventEmitter = require( "events" ); class MyEmitter extends EventEmitter { foo() { this .emit( "test" ); } } const myEmitter = new MyEmitter(); myEmitter.on( "test" , () => console.log( "Yay, it works!" )); myEmitter.foo(); |
Выход:
Особенности класса EventEmitter:
- Этот класс предназначен для обработки событий.
- Он может наследовать функциональность событий в других классах.
- Он излучает события.
- Он слушает и обрабатывает события.
- Это помогает запускать несколько потоков в фоновом режиме.
Методы EventEmitter:
- emitobj.on(событие, слушатель)
- emitobj.emit(событие,[arg1],[arg2],..[argN])
- emitobj.once (событие, слушатель)
- emitobj.removeListener (событие, слушатель)
Реализация методов EventEmitter:
Пример: В этом примере мы видим практическую реализацию методов EventEmitter. Мы видим все четыре метода, такие как on(), emit(), Once() и removeListener() EventEmitter .
Javascript
var events = require( "events" ); var eventEmitter = new events.EventEmitter(); // listener #1 var listener1 = function listener1() { console.log( "listener1 executed." ); } // listener #2 var listener2 = function listener2() { console.log( "listener2 executed." ); } // Bind the connection event with the listener1 function eventEmitter.addListener( "connection" , listener1); // Bind the connection event with the listener2 function eventEmitter.on( "connection" , listener2); var eventListeners = require( "events" ).EventEmitter.listenerCount (eventEmitter, "connection" ); console.log(eventListeners + " Listener(s) listening to connection event" ); // Fire the connection event eventEmitter.emit( "connection" ); // Remove the binding of listener1 function eventEmitter.removeListener( "connection" , listener1); console.log( "Listener1 will not listen now." ); // Fire the connection event eventEmitter.emit( "connection" ); eventListeners = require( "events" ).EventEmitter.listenerCount (eventEmitter, "connection" ); console.log(eventListeners + " Listener(s) listening to connection event" ); console.log( "Program Ended." ); |
Выход: