bus.js 658 B

123456789101112131415161718192021222324252627282930
  1. // 极简事件总线(避免引入额外依赖)
  2. const listeners = new Map()
  3. export function on(event, handler) {
  4. if (!event || typeof handler !== 'function') return
  5. const set = listeners.get(event) || new Set()
  6. set.add(handler)
  7. listeners.set(event, set)
  8. }
  9. export function off(event, handler) {
  10. const set = listeners.get(event)
  11. if (!set) return
  12. set.delete(handler)
  13. if (set.size === 0) listeners.delete(event)
  14. }
  15. export function emit(event, payload) {
  16. const set = listeners.get(event)
  17. if (!set || set.size === 0) return
  18. for (const fn of Array.from(set)) {
  19. try {
  20. fn(payload)
  21. } catch (e) {
  22. // ignore
  23. }
  24. }
  25. }