app-event-emitter.ts 1.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
import { EventEmitter } from 'events';

/**
 * 事件
 *
 * @export
 * @class IBzEventEmitter
 */
export class AppEventEmitter<K, V> {
    /**
     * 事件对象
     *
     * @private
     * @memberof AppEventEmitter
     */
    private readonly e = new EventEmitter();

    /**
     * 注册事件
     *
     * @param {K} eventName 事件名称
     * @param {(data: V) => void} callback 回调
     * @memberof AppEventEmitter
     */
    on(eventName: K, callback: (data: V) => void): void {
        this.e.on(eventName as any, callback);
    }

    /**
     * 订阅一次
     *
     * @param {K} eventName 事件名称
     * @param {(data: V) => void} callback 回调
     * @memberof AppEventEmitter
     */
    once(eventName: K, callback: (data: V) => void): void {
        this.e.once(eventName as any, callback);
    }

    /**
     * 发送事件
     *
     * @param {K} eventName 事件名称
     * @param {V} data 发送数据
     * @memberof AppEventEmitter
     */
    emit(eventName: K, data: V): void {
        this.e.emit(eventName as any, data);
    }

    /**
     * 取消订阅
     *
     * @param {K} eventName 事件名称
     * @param {(data: V) => void} callback 注册时的回调
     * @memberof IBzEventEmitter
     */
    off(eventName: K, callback: (data: V) => void): void {
        this.e.off(eventName as any, callback);
    }
}