From 84ce57a27b6b5bc20831b43fd6eff4f887d7d2fe Mon Sep 17 00:00:00 2001 From: xiaowei Date: Thu, 22 Oct 2020 20:39:42 +0800 Subject: [PATCH] feat: support multiple subscribe for the same event --- src/common/event.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/common/event.ts diff --git a/src/common/event.ts b/src/common/event.ts new file mode 100644 index 000000000..62d09be96 --- /dev/null +++ b/src/common/event.ts @@ -0,0 +1,35 @@ +export class EventEmitter { + private _events = new Map(); + + public emit(name: string, args: ArgsType) { + const events = this._events.get(name); + if (events && events.length > 0) { + // The log for development + console.log('event emit:', name, args); + events.forEach((callEvent) => { + callEvent(args); + }); + } + } + + public subscribe(name: string | string[], callback: Function ) { + if (Array.isArray(name)) { + name.forEach((key: string) => { + this.assignEvent(key, callback); + }); + } else { + this.assignEvent(name, callback); + } + // The log for development + console.log('event on:', name); + } + + public assignEvent(name: string, callback: Function) { + const event = this._events.get(name); + if (event) { + event.push(callback); + } else { + this._events.set(name, [callback] ); + } + } +}