快速开始
本章介绍如何安装并使用 @ai-zen/event-bus。
安装
bash
npm install @ai-zen/event-bus
# 或
pnpm add @ai-zen/event-bus引入
ts
import EventBus, { eventBus } from "@ai-zen/event-bus";EventBus:默认导出,为可实例化的类。eventBus:具名导出,为全局单例,可在多处共享。
创建实例
ts
const bus = new EventBus();若不想维护多个实例,可直接使用全局单例:
ts
import { eventBus } from "@ai-zen/event-bus";
eventBus.on("event", handler);订阅与触发
ts
const bus = new EventBus();
bus.on("greet", (name: string) => {
console.log(`Hello, ${name}!`);
});
bus.emit("greet", "AI-Zen"); // Hello, AI-Zen!emit 会将后续参数原样传给所有已订阅的 handler。
退订
使用 off
ts
const handler = () => console.log("hi");
bus.on("greet", handler);
bus.off("greet", handler); // 退订该 handler使用 Disposable
on / once 返回一个 Disposable,可用 dispose() 退订:
ts
const disposable = bus.on("greet", handler);
disposable.dispose(); // 等价于 bus.off("greet", handler)清除事件或全局
ts
bus.offAll("greet"); // 清除 "greet" 的所有 handler
bus.destroy(); // 清除全部订阅一次性订阅:once
once 订阅后,事件第一次触发即自动退订:
ts
bus.once("greet", (name) => {
console.log(`Hello once, ${name}!`);
});
bus.emit("greet", "A"); // Hello once, A!
bus.emit("greet", "B"); // 不再触发Promise 化:promise
promise 返回一个在事件触发时会 resolve 的 Promise:
ts
const result = await bus.promise("reply");
bus.emit("reply", "done");
// result === "done"收集结果:gather / gatherMap
gather 返回所有 handler 的返回结果数组,gatherMap 返回以 handler 为键的结果 Map:
ts
bus.on("calc", () => 1);
bus.on("calc", () => 2);
const results = bus.gather<number>("calc"); // [1, 2]
const resultsMap = bus.gatherMap<number>("calc"); // Map(handler -> result)错误处理:error
为事件注册错误处理器,再通过 error 派发错误:
ts
bus.on("load", () => {
// 正常处理
}, (reason) => {
console.error("load failed:", reason);
});
bus.error("load", new Error("boom")); // 触发该事件的错误处理器亦可结合 promise 使用:
ts
bus.promise("load").catch((reason) => {
console.error("load failed:", reason);
});
bus.error("load", new Error("boom"));参考
- EventBus 事件管理库 —— 概述与核心特性。
- API 参考 —— 完整方法说明。