Event.EventEmitter
Описание
Класс реализует интерфейс EventEmitter'а для работы с кастомными событиями.
import {Event} from 'main.core'; // Отправка событий в классе наследнике class Button extends Event.EventEmitter { constructor() { super(); // Отправка события BX.MyModule.MyClass:ready this.emit('BX.UI.Button:ready'); } render() { // Отправка события BX.MyModule.MyClass:beforeRender this.emit('BX.UI.Button:beforeRender'); // ... // Отправка события BX.MyModule.MyClass:render this.emit('BX.UI.Button:render'); } onClick() { const event = new Event.BaseEvent({data: {...}}); // Отправка события BX.MyModule.MyClass:render this.emit('BX.UI.Button:click', event); } }
Подписка на события объекта
const button = new Button(); button .subscribe('BX.UI.Button:ready', (event) => { console.log('Button is ready', event); }) .subscribe('BX.UI.Button:render', (event) => { console.log('Button is rendered', event); }) .subscribe('BX.UI.Button:click', (event) => { console.log('Button is clicked', event); });
Глобальная подписка на события всех объектов
Event.EventEmitter .subscribe('BX.UI.Button:ready', (event) => { console.log('Button is ready', event); }) .subscribe('BX.UI.Button:render', (event) => { console.log('Button is rendered', event); }) .subscribe('BX.UI.Button:click', (event) => { console.log('Button is clicked', event); });
Глобальная отправка событий
Event.EventEmitter .emit('BX.UI.Button:click');
Будут вызваны все обработчики события BX.UI.Button:click.
Event.EventEmitter.subscribe
Event.EventEmitter.subscribe(event: any, listener: (event: BaseEvent) => void): EventEmitter
Добавляет обработчик указанного события. В качестве первого параметра в обработчик передается объект типа BaseEvent.
import {Event} from 'main.core'; class Button extends Event.EventEmitter {} const emitter = new Button(); emitter.subscribe('BX.UI.Button:click', (event) => { // ... });
Event.EventEmitter.subscribeOnce
Event.EventEmitter.subscribeOnce(event: any, listener: (event: BaseEvent) => void): EventEmitter
Добавляет обработчик указанного события, который будет вызван только один раз.
import {Event} from 'main.core'; class Button extends Event.EventEmitter {} const emitter = new Button(); emitter.subscribeOnce('BX.UI.Button:click', (event) => { // ... });
Event.EventEmitter.unsubscribe
Event.EventEmitter.unsubscribe(event: any, listener: Function) => void): EventEmitter
Удаляет обработчик события.
import {Event} from 'main.core'; class Button extends Event.EventEmitter {} const emitter = new Button(); emitter.subscribeOnce('BX.UI.Button:click', clickHandler);
Event.EventEmitter.emit
Event.EventEmitter.emit(eventName: any, event?: BaseEvent | {[key: string]: any}): EventEmitter
Отправляет событие.
import {Event} from 'main.core'; // Отправка событий в классе наследнике class Button extends Event.EventEmitter { constructor() { super(); // Отправка события BX.MyModule.MyClass:ready this.emit('BX.UI.Button:ready'); } // ... }
Event.EventEmitter.emitAsync
Event.EventEmitter.emitAsync(eventName: any, event?: BaseEvent | {[key: string]: any}): Promise
Отправляет событие и возвращает Promise, который будет решен, когда решатся все промисы возвращенные из обработчиков события или отклонен, когда хотя бы один из возвращенных промисов будет отклонен.
Обратите внимание, что промис решается со значением типа Array, содержащим значения промисов вернувшихся из обработчиков. Порядок значений соответствует порядку подписки обработчиков, а не порядку решения промисов.
Также, обратите внимание на то, что из синхронных обработчиков не обязательно возвразать промис, можно просто вернуть значение любого типа. Либо вообще ничего не возвращать.
import {Event} from 'main.core'; class Button extends Event.EventEmitter {} const button = new Button(); button.subscribe('click', () => { return new Promise((resolve) => { setTimeout(() => { resolve('value 1'); }, 1000); }); }); button.subscribe('click', () => { return 'value 2'; }); button .emitAsync('click') .then((results) => { console.log(result[0]); // => 'value 1' console.log(result[1]); // => 'value 2' });
Event.EventEmitter.setMaxListeners
Event.EventEmitter.setMaxListeners(count: number): EventEmitter
Устанавливает максимальное количество обработчиков для каждого события. По умолчанию 10. Если количество обработчиков превысит максимальное количество, то в консоль будет выведено предупреждение.
import {Event} from 'main.core'; class Button extends Event.EventEmitter {} const emitter = new Button(); emitter.setMaxListeners(2); emitter .subscribe('BX.UI.Button:click', () => {}) .subscribe('BX.UI.Button:click', () => {}) .subscribe('BX.UI.Button:click', () => {}); // => Possible BX.Event.EventEmitter memory leak detected. 3 BX.UI.Button:click listeners added. Use emitter.setMaxListeners() to increase limit
Event.EventEmitter.getMaxListeners
Event.EventEmitter.getMaxListeners(): Number
Возвращает текущий лимит на количество обработчиков для каждого события.
Event.EventEmitter.getListeners
Event.EventEmitter.getListeners(eventName: any): Set | null
Возвращает список обработчиков указанного события.
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.