Skip to main content

Що робить метод emit()?

1. Що робить emit()

Метод .emit(eventName, [...args]) генерує подію з іменем eventName і викликає всі обробники (listeners), які були підписані на цю подію через .on() чи .once().

Приклад:

javascript
const EventEmitter = require('events'); const emitter = new EventEmitter(); // Підписка emitter.on('greet', (name) => { console.log(`Привіт, ${name}!`); }); // Генерація події emitter.emit('greet', 'Тім');

Вивід:

javascript
Привіт, Тім!

Що відбулося:

  1. .emit('greet', 'Тім') - створює подію greet;
  2. Node.js знаходить усіх слухачів greet;
  3. викликає кожного з них, передаючи 'Тім' як аргумент;
  4. якщо слухачів немає - нічого не відбувається.

2. Синтаксис

javascript
emitter.emit(eventName[, ...args])
  • eventName - рядок (ім'я події);
  • ...args - будь-які значення, які будуть передані слухачам.

3. Як це працює "під капотом"

Коли викликається .emit():

  1. Node.js звертається до внутрішньої карти слухачів (_events);
  2. перевіряє, чи є слухачі для eventName;
  3. якщо є - викликає їх у порядку реєстрації (.on() -> .once());
  4. якщо це .once(), слухач видаляється після виклику;
  5. якщо подія 'error' викликана без слухача - кидається виняток, і процес завершується.

Особлива поведінка для 'error'

Якщо викликати:

javascript
emitter.emit('error', new Error('Щось пішло не так'));

і немає слухача 'error', Node.js:

  • кине помилку (Uncaught Error);
  • завершить процес.

Тому хорошою практикою є додавати обробник 'error':

javascript
emitter.on('error', (err) => { console.error('Помилку впіймано:', err.message); });

4. Значення, що повертається

.emit() повертає:

  • true, якщо у події є хоча б один слухач;
  • false, якщо слухачів немає.
javascript
console.log(emitter.emit('greet')); // true console.log(emitter.emit('unknown')); // false

5. Приклад з кількома слухачами

javascript
emitter.on('update', () => console.log('Оновлення отримано')); emitter.on('update', () => console.log('Дані оброблено')); emitter.emit('update');

Вивід:

javascript
Оновлення отримано Дані оброблено

6. Приклад з аргументами

javascript
emitter.on('sum', (a, b) => { console.log('Сума =', a + b); }); emitter.emit('sum', 3, 7);

Вивід:

javascript
Сума = 10

Підсумок

Метод .emit():

  • генерує подію в об'єкті EventEmitter;
  • викликає всі обробники, підписані через .on() і .once();
  • може передавати аргументи слухачам;
  • повертає true, якщо слухачі є, і false, якщо немає.

Це - основний спосіб "сказати" системі, що щось відбулося, щоб інші частини коду відреагували.

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

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

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