跳到主要内容

用发布订阅模式解耦

eventEmitter.ts示例如下:

const EventNames = ["API:UN_AUTH", "API:VALIDATE_ERROR"] as const;
type EventNames = (typeof EventNames)[number];

class EventMitter {
private listeners: Record<EventNames, Set<Function>> = {
"API:UN_AUTH": new Set(),
"API:VALIDATE_ERROR": new Set(),
};

on(eventName: EventNames, listener: Function) {
this.listeners[eventName].add(listener);
}

emit(eventName: EventNames, ...args: any[]) {
this.listeners[eventName].forEach((listener) => listener(...args));
}
}

/**
* 返回一个单例的事件管理器实例,用于在应用程序中统一管理和触发事件。
*/
export default new EventMitter();