tstype Rets = any[]
type CallBack = (...ret: Rets) => void
class EventBus {
events: Record<string, Set<CallBack>> = {}
on(eventName: string, cb: CallBack) {
if (!events[eventName]) {
this.events[eventName] = new Set()
}
this.events[eventName].add(cb)
}
emit(eventName: string, ...ret: Rets) {
this.events[eventName].forEach(cb => cb(...ret))
}
off(eventName: string, cb: CallBack) {
this.events[eventName].delete(cb)
}
once(eventName: string, cb: CallBack) {
const handler = (...ret: Rets) => {
cb(...ret)
this.off(eventName, handler)
}
this.on(eventName, cb)
}
}
const bus = new EventBus()
bus.emit("change", "hello world")
评论区
评论加载中...