API 参考
EventBus 是默认导出类;eventBus 是具名导出的全局单例。
类:EventBus
ts
import EventBus from "@ai-zen/event-bus";new EventBus()
创建事件总线实例,内部维护 subscribers。
ts
const bus = new EventBus();bus.subscribers
- 类型:
Map<string, Map<EventHandler, ErrorHandler>> - 说明:公开属性,存储事件订阅者。键为事件名,值为「handler -> errorHandler」的映射。一般无需直接访问。
ts
bus.subscribers.has("greet"); // falsebus.on(name, handler, error?)
- 类型:
on(name: string, handler: EventHandler, error?: ErrorHandler): Disposable - 说明:订阅事件。返回一个
Disposable,调用其dispose()可退订。 - 参数:
name:事件名。handler:事件处理函数。error(可选):错误处理函数。
- 返回:
Disposable。 - 示例:
ts
const disposable = bus.on("greet", (name) => {
console.log(name);
});
disposable.dispose();bus.off(name, handler)
- 类型:
off(name: string, handler: EventHandler): boolean - 说明:退订指定事件的指定 handler。成功退订返回
true,否则返回false。 - 示例:
ts
const ok = bus.off("greet", handler);bus.offAll(name)
- 类型:
offAll(name: string): void - 说明:清空指定事件的所有 handler 与错误处理器。
- 示例:
ts
bus.offAll("greet");bus.destroy()
- 类型:
destroy(): void - 说明:清空全部订阅,销毁事件总线。
- 示例:
ts
bus.destroy();bus.emit(name, ...args)
- 类型:
emit(name: string, ...args: any[]): void - 说明:触发事件,将
args原样传给所有已订阅的 handler。只调用 handler,不会调用错误处理器。 - 示例:
ts
bus.emit("greet", "AI-Zen");bus.error(name, reason)
- 类型:
error(name: string, reason: any): void - 说明:向指定事件的错误处理器派发错误,只调用订阅时传入的
error处理器。 - 示例:
ts
bus.error("load", new Error("boom"));bus.gather<T>(name, ...args)
- 类型:
gather<T>(name: string, ...args: any[]): T[] - 说明:调用指定事件的所有 handler,返回它们的返回结果数组。
- 示例:
ts
const results = bus.gather<number>("calc");bus.gatherMap<T>(name, ...args)
- 类型:
gatherMap<T>(name: string, ...args: any[]): Map<EventHandler, T> - 说明:调用指定事件的所有 handler,返回以 handler 为键、返回结果为值的
Map。 - 示例:
ts
const m = bus.gatherMap<number>("calc");bus.once(name, handler, error?)
- 类型:
once(name: string, handler: EventHandler, error?: ErrorHandler): Disposable - 说明:订阅事件,事件第一次触发后自动退订。返回
Disposable。 - 示例:
ts
bus.once("reply", (value) => console.log(value));
bus.emit("reply", "done"); // 仅触发一次bus.promise(name)
- 类型:
promise(name: string): Promise<any> - 说明:返回一个 Promise,事件触发时 resolve;若对该事件调用
error,则该 Promise reject。 - 示例:
ts
const result = await bus.promise("reply");
bus.emit("reply", "done");bus.subscribe / bus.unsubscribe / bus.publish
- 说明:三者均为 getter 属性,分别返回
on/off/emit方法的引用,作为别名使用。
ts
bus.subscribe("greet", handler); // 等价于 bus.on
bus.unsubscribe("greet", handler); // 等价于 bus.off
bus.publish("greet", "AI-Zen"); // 等价于 bus.emit具名导出
eventBus
全局单例 EventBus 实例,可在多处共享同一总线。
ts
import { eventBus } from "@ai-zen/event-bus";
eventBus.on("greet", handler);类型定义
ts
type EventHandler = (...args: any[]) => any; // 事件处理函数
type ErrorHandler = (reason?: any) => void; // 错误处理函数
type Disposable = { dispose: () => void }; // 可退订对象EventHandler:事件处理函数,接收任意参数并返回任意结果。ErrorHandler:错误处理函数,接收可选的reason。Disposable:具有dispose()方法的对象,用于退订。
说明
- 类型定义位于构建产物
dist/EventBus.d.ts。 - 源码见仓库内
src/EventBus.ts。 - 若对某些行为(如
once的自动退订、promise的 reject 触发条件、subscribe/unsubscribe/publish为 getter 别名)有疑问,请以src/EventBus.ts实现为准。