Объект 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 modulevar events = require("events");// Create an eventEmitter objectvar eventEmitter = new events.EventEmitter()// Create an event handler as followsvar connectHandler = function connected() { console.log("connection successful."); // Fire the data_received event eventEmitter.emit("data_received");}// Bind the connection event with the handlereventEmitter.on("connection", connectHandler);// Bind the data_received event with the anonymous functioneventEmitter.on("data_received", function () { console.log("data received successfully.");});// Fire the connection eventeventEmitter.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 #1var listener1 = function listener1() { console.log("listener1 executed.");}// listener #2var listener2 = function listener2() { console.log("listener2 executed.");}// Bind the connection event with the listener1 functioneventEmitter.addListener("connection", listener1);// Bind the connection event with the listener2 functioneventEmitter.on("connection", listener2);var eventListeners = require("events").EventEmitter.listenerCount (eventEmitter, "connection");console.log(eventListeners + " Listener(s) listening to connection event");// Fire the connection eventeventEmitter.emit("connection");// Remove the binding of listener1 functioneventEmitter.removeListener("connection", listener1);console.log("Listener1 will not listen now.");// Fire the connection eventeventEmitter.emit("connection");eventListeners = require("events").EventEmitter.listenerCount (eventEmitter, "connection");console.log(eventListeners + " Listener(s) listening to connection event");console.log("Program Ended."); |
Выход: