发布订阅模式

ts
type 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")
Nuxt报错解决
mongodb快速使用