Skip to content

Latest commit

 

History

History
97 lines (60 loc) · 5.81 KB

README.ru.md

File metadata and controls

97 lines (60 loc) · 5.81 KB

Простая шина событий event bus на JavaScript

Документация EventBus

EventBus - это легковесная реализация системы публикации/подписки на события, предназначенная для использования в JavaScript-приложениях.

Создание экземпляра EventBus

Экземпляр EventBus создается внутри файла модуля, поэтому его не нужно создавать вручную. Вы просто импортируете экземпляр и начинаете его использовать:

import eventBus from '/path/to/eventBus';

Методы

on(event, callback)

Подписывает функцию callback на событие event.

Параметры:

  • event (String): Имя события.
  • callback (Function): Обработчик события, который вызывается при срабатывании события.

Пример:

eventBus.on('message', function(data) {
  console.log('Event message received:', data);
});

off(event, callback)

Отписывает функцию callback от события event.

Параметры:

  • event (String): Имя события.
  • callback (Function): Обработчик события, который был подписан ранее.

Пример:

eventBus.off('message', messageHandler);

emit(event, ...args)

Генерирует событие event, передавая все последующие аргументы подписанным на это событие функциям обратного вызова (callback).

Параметры:

  • event (String): Имя генерируемого события.
  • ...args: Аргументы, которые будут переданы в функцию callback.

Пример:

eventBus.emit('message', 'Hello, World!');

Работа с очередью

EventBus также включает в себя механизм очереди для событий, для которых еще нет обработчика. Когда обработчик подписывается на событие, все события из очереди, соответствующие этому событию, обрабатываются немедленно.

// Предположим, что событие 'message' было сгенерировано, но обработчик еще не подписан
eventBus.emit('message', 'Delayed message');

// Теперь подписываем обработчик, и он немедленно получает событие из очереди
eventBus.on('message', function(data) {
  console.log('Event message received:', data);
});

Используйте EventBus с осторожностью, чтобы избежать утечек памяти или необоснованных подписок, убедитесь, что отписываетесь от событий при очистке или размонтировании компонентов.

Экспорт экземпляра EventBus

Экземпляр EventBus экспортируется из модуля, чтобы гарантировать, что во всем приложении используется один и тот же экземпляр.

export default eventBus;

Импортируйте этот экземпляр в любой части вашего приложения для отправки и прослушивания событий.

Примечание по асинхронности

Очередь (this.queue) в реализации шины событий EventBus используется для хранения событий, которые были сгенерированы ("эмитированы") до того, как на них были зарегистрированы обработчики. Это механизм, который обеспечивает асинхронную обработку событий и позволяет вам сначала сгенерировать событие, а затем подписаться на него.

Когда метод emit вызывается для события, для которого в настоящий момент нет обработчиков, событие вместе с его аргументами помещается в очередь. Если впоследствии появится обработчик для этого события (через вызов метода on), он немедленно будет вызван для каждого события в очереди, которое соответствует имени подписываемого события, и аргументы, переданные при генерации события, будут ему переданы.

Другими словами, это решение для ситуаций, когда emit вызывается до того, как on зарегистрирует обработчик. Без такой очереди события бы просто терялись, если бы они были сгенерированы до назначения обработчика.

После того как обработчик вызывается по событиям из очереди, она фильтруется, чтобы удалить эти события. Это предотвращает повторный вызов тех же самых обработчиков, если они будут добавлены позже.