Объект EventEmitter в Node.js

Опубликовано: 23 Февраля, 2023

Все мы знаем, что приложения 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.");

Выход: