Що робить метод 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
Привіт, Тім!Що відбулося:
.emit('greet', 'Тім')- створює подіюgreet;- Node.js знаходить усіх слухачів
greet; - викликає кожного з них, передаючи
'Тім'як аргумент; - якщо слухачів немає - нічого не відбувається.
2. Синтаксис
javascript
emitter.emit(eventName[, ...args])eventName- рядок (ім'я події);...args- будь-які значення, які будуть передані слухачам.
3. Як це працює "під капотом"
Коли викликається .emit():
- Node.js звертається до внутрішньої карти слухачів (
_events); - перевіряє, чи є слухачі для
eventName; - якщо є - викликає їх у порядку реєстрації (
.on()->.once()); - якщо це
.once(), слухач видаляється після виклику; - якщо подія
'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')); // false5. Приклад з кількома слухачами
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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.