Хранилище держит значение и набор обработчиков; subscribe возвращает функцию отписки, а set уведомляет снимок текущих подписчиков.
Реализуйте класс хранилища по паттерну «Наблюдатель»: класс хранит данные, позволяет подписывать и отписывать callback-функции, а при изменении данных уведомляет всех текущих подписчиков, передавая им новые данные.
Хранилище держит значение и набор обработчиков; 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 требуют отдельно выбранной политики.