UNPKG

@flowlab/all

Version:

A cool library focusing on handling various flows

66 lines (57 loc) 1.58 kB
import { IEventBus, EventHandler, EventPayload } from '../types'; /** * EventBus 抽象基类,提供 emit/on/off 的基础能力 */ export class EventBus implements IEventBus { protected handlers: Map<string, Set<EventHandler>> = new Map(); /** * 触发事件 * @param eventName - 事件名称 * @param payload - 事件数据 */ async emit(eventName: string, payload: EventPayload): Promise<void> { const handlers = this.handlers.get(eventName); if (handlers) { for (const handler of handlers) { try { await handler(payload); } catch (err) { console.error(`[FlowLab EventBus] Error handling event ${eventName}`, err); } } } } /** * 绑定事件处理器 * @param eventName - 事件名称 * @param handler - 事件处理函数 */ on(eventName: string, handler: EventHandler): void { if (!this.handlers.has(eventName)) { this.handlers.set(eventName, new Set()); } this.handlers.get(eventName)?.add(handler); } /** * 解绑事件处理器 * @param eventName - 事件名称 * @param handler - 事件处理函数 */ off(eventName: string, handler: EventHandler): void { this.handlers.get(eventName)?.delete(handler); } /** * 启动事件监听(由子类实现) */ // abstract start(): Promise<void>; start(): Promise<void> { return Promise.resolve(); } /** * 停止事件监听(由子类实现) */ // abstract stop(): Promise<void>; stop(): Promise<void> { return Promise.resolve(); } }