Observer & Singleton Patterns

What is the best way to implement unsubscribe functionality in the Observer Pattern?
class EventEmitter {
  constructor() {
    this.listeners = new Map();
  }

  on(event, callback) {
    if (!this.listeners.has(event)) {
      this.listeners.set(event, new Set());
    }
    this.listeners.get(event).add(callback);
    
    return () => {
      this.listeners.get(event)?.delete(callback);
      if (this.listeners.get(event)?.size === 0) {
        this.listeners.delete(event);
      }
    };
  }

  emit(event, data) {
    this.listeners.get(event)?.forEach(callback => callback(data));
  }
}
Next Question (8/15)