Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Як підписатися на подію?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Через `.on(eventName, listener)` для постійної підписки чи `.once(eventName, listener)` для одноразової; кілька обробників на одну подію викликаються в порядку реєстрації, а відписатися можна через `.off()` чи `.removeListener()`. **Ключове:** цей самий механізм працює скрізь у Node.js - потоки, HTTP-сервер, сокети й `process` теж є `EventEmitter` і використовують ті самі `.on()`/`.once()`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 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, файловій системі, процесах і користувацьких подіях.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.