Реализуйте класс хранилища по паттерну «Наблюдатель»: класс хранит данные, позволяет подписывать и отписывать callback-функции, а при изменении данных уведомляет всех текущих подписчиков, передавая им новые данные.

Хранилище держит значение и набор обработчиков; subscribe возвращает функцию отписки, а set уведомляет снимок текущих подписчиков.

Короткий ответ

Что ответить на собеседовании

Хранилище держит значение и набор обработчиков; subscribe возвращает функцию отписки, а set уведомляет снимок текущих подписчиков.

Подробный разбор

Ответ с пояснениями

Хранилище держит значение и набор обработчиков; subscribe возвращает функцию отписки, а set уведомляет снимок текущих подписчиков.

Простой синхронный вариант:

class Store {
  constructor(data) { this.data = data; this.listeners = new Set(); }
  get() { return this.data; }
  subscribe(callback) {
    this.listeners.add(callback);
    return () => this.listeners.delete(callback);
  }
  set(data) {
    this.data = data;
    const errors = [];
    for (const callback of [...this.listeners]) {
      try { callback(data); } catch (error) { errors.push(error); }
    }
    if (errors.length) throw new AggregateError(errors, 'Ошибки подписчиков');
  }
}

Одинаковая функция регистрируется один раз. Снимок фиксирует состав на начало уведомления; мутация объекта через get не уведомляет автоматически. Вложенные set требуют отдельно выбранной политики.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее