用发布订阅模式解耦
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();