Получить последние 2 значения из статуса в магазине rxjs - PullRequest
2 голосов
/ 10 июля 2019

Мне нужно отслеживать изменения последнего идентификатора в магазине, поэтому мне нужно получить значение до изменения и после изменения.

 this.store.select(currentSearchSelector).subscribe(search => {
      this.currentSearchId = search.id;
      console.log('current ' + this.currentSearchId);
      // I need to detect the change on this id in the store
    });

Как правильно следить за последними изменениями, не теряя предыдущие изменения?

Например: если currentSearchID = 21, затем изменить на 22, мне нужно обнаружить это изменение. При наличии подписки подписчик будет получать только последние изменения.

1 Ответ

2 голосов
/ 10 июля 2019

Спасибо за ваш вопрос!

Я думаю, вы могли бы использовать оператор bufferCount со значением 2.

Это создаст наблюдаемое, которое будет испускать значения только тогда, когда буфер заполнен и испускает значения в виде массива . Для получения дополнительной информации вы можете проверить официальную документацию .

P.S. Размер буфера в вашем случае должен быть 2.

this.store.select(currentSearchSelector)
    .pipe(bufferCount(2))
    .subscribe(([previousSearch, currentSearch]) => {
       this.currentSearchId = currentSearch.id;
       console.log('current ' + this.currentSearchId);
       console.log('previous ' + previousSearch.id);
    });

Также есть пример с оператором bufferCount StackBlitz

Обновление

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

В зависимости от того, что вы выберете, вам, вероятно, также потребуется связать его с оператором фильтрации , чтобы проверить изменение поискового идентификатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...