Создание событий при помощи trackChanges

Пытаюсь создать событие при изменении переменной при помощи пакета TrackChanges. Но вылетает ошибка "This name is already being used" при попытке создать observer даже для самой простой переменной:

const TrackChanges = require('track-changes-js');

const trackChanges = new TrackChanges();
const CreateTemplate = (nTitle, imageSrc, ElementType, Selector) => {
  let a = 1;
  trackChanges.addObserver('obs', () => a);}

введите сюда описание изображения

В чем может быть проблема?


Ответы (3 шт):

Автор решения: Aziz Umarov

Если смотреть документацию, которая указывает что вам нужно указать имя обзерверу

trackChanges.addObserver('obs_' + nTitle, () => a); // используйте что-то уникальное
trackChanges.addHandler('obs_' + nTitle, nTitleHandler);

Вы добавляете постоянно addObserver с именем obs для переменной a. Я думаю что вам нужно определять новый обзервер для каждого нового случая. А у вас постоянно один obs

→ Ссылка
Автор решения: 8Irbis8

Вынесла объявление observer из функции, а хэндлер можно объявлять в ней. Это решило проблему

→ Ссылка
Автор решения: itmor

Спасибо за использование моей библиотеки)

Внесу ясности.

Наблюдатель должен иметь уникальное имя. Библиотека во имя производительности использует одно хранилище где лежат эти имена наблюдателей.

Ваша проблема в том что у вас уже есть наблюдатель с именем 'obs' в другом месте, или файле.

Обьявление наблюдателя: trackChanges.addObserver('observer', () => value);

Первый аргумент, имя наблюдателя. (observer)

Второй аргумент, наблюдаемая сущность которую возвращет функция (value)


После этого вы можете добавить обработчик, их можно создавать неограниченое количевство.

Первый аргумент, имя созданого наблюдателя (observer)

Второй аргумент, колбэк который вызывается при изменении сущности, аргументом будет измененная сущность.

trackChanges.addHandler('observer', (changes) => console.log(changes)); trackChanges.addHandler('observer', (changes) => console.table({changes}));

→ Ссылка