На этой странице

    Если вы работали с JavaScript в браузере, то знаете, какая большая часть взаимодействия с пользователем обрабатывается через события: клики мышью, нажатия клавиш, реакция на движения мыши и так далее.

    На стороне бэкенда Node.js даёт нам возможность построить похожую систему с помощью модуля events.

    Этот модуль, в частности, предоставляет класс EventEmitter, который мы будем использовать для обработки наших событий.

    Инициализируется он так:

    const EventEmitter = require('node:events');
    
    const eventEmitter = new EventEmitter();

    Этот объект предоставляет, среди многих других, методы on и emit.

    • emit используется, чтобы инициировать событие
    • on используется, чтобы добавить функцию-колбэк, которая выполнится при срабатывании события

    Например, создадим событие start и, чтобы дать пример, отреагируем на него простым выводом в консоль:

    eventEmitter.on('start', () => {
      console.log('started');
    });

    Когда мы выполняем

    функция-обработчик события срабатывает, и мы получаем вывод в консоль.

    Аргументы обработчику события можно передавать, передавая их как дополнительные аргументы в emit():

    eventEmitter.on('start', number => {
      console.log(`started ${number}`);
    });
    
    eventEmitter.emit('start', 23);

    Несколько аргументов:

    eventEmitter.on('start', (start, end) => {
      console.log(`started from ${start} to ${end}`);
    });
    
    eventEmitter.emit('start', 1, 100);

    Объект EventEmitter также предоставляет несколько других методов для взаимодействия с событиями, например:

    • once(): добавить одноразовый слушатель
    • removeListener() / off(): удалить слушатель события
    • removeAllListeners(): удалить все слушатели события

    Подробнее об этих методах можно почитать в официальной документации.