Skip to main content
Практика завдань

Що таке eventemitter у Node.js?

Node.js EventEmitter

EventEmitter є основою подієво-орієнтованої архітектури Node.js. Це вбудований клас (events модуль), який реалізує шаблон спостерігача — дозволяючи об'єктам генерувати події з іменами та реєструвати слухачів.


Основне використання

js
const EventEmitter = require('events'); const emitter = new EventEmitter(); // Реєстрація слухача emitter.on('greet', (name) => { console.log(`Привіт, ${name}!`); }); // Генерація події emitter.emit('greet', 'Node.js'); // → Привіт, Node.js!

Основні методи

МетодОпис
emitter.on(event, listener)Додати слухача (псевдонім: addListener)
emitter.once(event, listener)Додати одноразового слухача
emitter.off(event, listener)Видалити слухача (псевдонім: removeListener)
emitter.emit(event, ...args)Генерувати подію
emitter.removeAllListeners(event)Видалити всіх слухачів
emitter.listeners(event)Перелічити всіх слухачів
emitter.listenerCount(event)Порахувати слухачів

once() — Виклик один раз

js
emitter.once('connect', () => { console.log('Підключено! Це викликається лише один раз.'); }); emitter.emit('connect'); // викликається emitter.emit('connect'); // ігнорується

Клас Custom EventEmitter

js
const EventEmitter = require('events'); class Database extends EventEmitter { connect() { // імітація асинхронного підключення setTimeout(() => { this.emit('connected', { host: 'localhost' }); }, 1000); } query(sql) { // імітація запиту setTimeout(() => { this.emit('data', [{ id: 1, name: 'Alice' }]); }, 500); } } const db = new Database(); db.on('connected', ({ host }) => { console.log(`Підключено до ${host}`); db.query('SELECT * FROM users'); }); db.on('data', rows => { console.log('Отримані рядки:', rows); }); db.connect();

Події помилок

'error' є спеціальною подією — якщо вона генерується без слухача, Node.js викидає необроблене виключення:

js
// Завжди слухайте 'error'! emitter.on('error', (err) => { console.error('Виявлена помилка:', err.message); }); emitter.emit('error', new Error('Щось пішло не так'));

Попередження про максимальну кількість слухачів

Node.js попереджає, коли ви додаєте більше 10 слухачів до однієї події (захист від витоків пам'яті):

js
emitter.setMaxListeners(20); // збільшити ліміт // або emitter.setMaxListeners(0); // без обмежень

EventEmitter в основі Node.js

Багато вбудованих об'єктів Node.js розширюють EventEmitter:

  • http.Server'request', 'close', 'error'
  • net.Socket'data', 'end', 'error'
  • fs.ReadStream'data', 'end', 'error'
  • process'exit', 'uncaughtException', 'SIGTERM'

Підсумок

EventEmitter забезпечує слабку зв'язність та подієво-орієнтовану архітектуру в Node.js. Це основа потоків, HTTP-серверів та більшості основних модулів Node.js. Використовуйте його для створення власних систем, орієнтованих на події, у ваших додатках.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.

Дочитали статтю?
Практика завдань