Проверяет понимание внутреннего устройства EventEmitter в Node.js и того, как хранятся и вызываются обработчики событий.
EventEmitter — это базовый класс в Node.js, реализующий паттерн «наблюдатель». Его задача — позволить разным частям программы подписываться на события и реагировать на них. Ключевой вопрос: где именно хранятся подписчики (коллбэки)?
Внутри экземпляра EventEmitter есть приватное поле (в современных версиях Node.js — _events), которое представляет собой объект без прототипа или Map. Ключом выступает имя события (строка или Symbol), а значением — либо одна функция, либо массив функций.
const { EventEmitter } = require('events');
const emitter = new EventEmitter();
emitter.on('data', (x) => console.log('A', x));
emitter.on('data', (x) => console.log('B', x));
// Внутри _events: { data: [fnA, fnB] }
emitter.emit('data', 42);
// Выведет: A 42, затем B 42
Метод emit находит значение по ключу события. Если это массив, он копируется (чтобы избежать мутаций во время обхода) и все функции вызываются синхронно по порядку подписки. Если это одна функция — вызывается она. Если обработчиков нет — возвращается false.
removeListener).Итог: EventEmitter хранит коллбэки в словаре «имя события → функция или массив функций», что даёт быстрый доступ по ключу и простой обход подписчиков. Такой подход удобен для событийно-ориентированной архитектуры, но требует аккуратного управления подписками.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию