Observer & Singleton Patterns

What is the best practice for implementing error handling in the Observer Pattern?
class Subject {
  #observers = new Set();

  subscribe(observer) {
    if (typeof observer.update !== 'function') {
      throw new Error('Observer must implement update method');
    }
    this.#observers.add(observer);
    return () => this.#observers.delete(observer);
  }

  notify(data) {
    const errors = [];
    this.#observers.forEach(observer => {
      try {
        observer.update(data);
      } catch (error) {
        errors.push({ observer, error });
      }
    });
    if (errors.length > 0) {
      this.handleErrors(errors);
    }
  }

  handleErrors(errors) {
    errors.forEach(({ observer, error }) => {
      console.error(`Observer error:`, error);
      // Optional: Remove failed observer
      // this.#observers.delete(observer);
    });
  }
}
Next Question (12/15)