bus.js 588 B

12345678910111213141516171819202122
  1. export default class Bus {
  2. constructor() {
  3. this.listeners = new Map();
  4. this.emitted = new Set();
  5. }
  6. on(evtName, listener) {
  7. if (this.emitted.has(evtName)) {
  8. listener();
  9. return;
  10. }
  11. const target = this.listeners.get(evtName) || [];
  12. target.push(listener);
  13. this.listeners.set(evtName, target);
  14. }
  15. emit(evtName) {
  16. const listeners = this.listeners.get(evtName);
  17. if (listeners) {
  18. listeners.forEach((func) => func());
  19. }
  20. this.emitted.add(evtName);
  21. }
  22. }