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);
});
}
}