Skip to main content

Як підписатися на подію?

1. Підписка через .on(eventName, listener)

Метод .on() реєструє обробник (listener) для вказаної події. Коли подія генерується за допомогою .emit(), викликаються всі обробники, підписані через .on().

Приклад:

javascript
const EventEmitter = require('events'); const emitter = new EventEmitter(); // Підписка на подію 'message' emitter.on('message', (data) => { console.log('Отримано повідомлення:', data); }); // Генерація події emitter.emit('message', 'Привіт, Node.js!');

Вивід:

javascript
Отримано повідомлення: Привіт, Node.js!

2. Підписка через .once(eventName, listener)

Метод .once() схожий на .on(), але обробник спрацьовує лише один раз, а потім автоматично видаляється.

Приклад:

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

3. Кілька підписників на одну подію

Можна підписати кілька обробників на одну подію - вони будуть викликані в порядку реєстрації:

javascript
emitter.on('update', () => console.log('Перший обробник')); emitter.on('update', () => console.log('Другий обробник')); emitter.emit('update');

Вивід:

javascript
Перший обробник Другий обробник

4. Видалення підписки

Якщо потрібно відписатися від події, використовують .off() чи .removeListener():

javascript
function handler() { console.log('Відбулася подія'); } emitter.on('event', handler); emitter.emit('event'); // спрацює emitter.off('event', handler); emitter.emit('event'); // не спрацює

5. Де використовується підписка на події в Node.js

Багато вбудованих об'єктів - це EventEmitter, і в них ті самі методи .on() і .once():

javascript
const fs = require('fs'); const stream = fs.createReadStream('file.txt'); // Підписка на системні події stream.on('data', (chunk) => console.log('Отримано шматок даних')); stream.on('end', () => console.log('Читання завершено')); stream.on('error', (err) => console.error('Помилка:', err));

Те саме працює з:

  • http.Server (on('request', handler))
  • net.Socket (on('connect', handler))
  • process (on('exit', handler))

Підсумок

Щоб підписатися на подію в Node.js, потрібно використати метод .on(eventName, listener) об'єкта EventEmitter.

  • .on() - постійна підписка
  • .once() - одноразова підписка
  • .off() / .removeListener() - відписка

Цей механізм використовується всюди: у потоках, HTTP, файловій системі, процесах і користувацьких подіях.

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

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

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