从rxjs存储中的状态获取最新的2个值

时间:2019-07-10 10:34:47

标签: javascript angular rxjs store angular2-observables

我需要跟踪商店上最新ID的更改,因此我需要获取更改之前和更改之后的值。

 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 个答案:

答案 0 :(得分:2)

谢谢您的提问!

我认为您可以使用值为2的bufferCount运算符。

它将创建一个可观察对象,该对象将仅在缓冲区已满时发出值,并以数组形式发出。要查找更多信息,可以检查official documentation

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

的示例

更新

pairwise operator是bufferCount的一个更特定的版本,它只将最后两个项目一起发出,在这里可能更合适。

无论选择哪种方式,您可能还需要将其与filter operator结合使用,以检查搜索ID的更改。