RxJS observable,从第一次发射开始发出先前值和当前值

时间:2018-04-27 09:42:27

标签: rxjs observable

我有BehaviorSubject定期发出JavaScript对象。我想构造另一个observable,它将发出底层observable的先前值和当前值,以便比较两个对象并确定delta。

pairwise()bufferCount(2, 1)运算符看起来很合适,但它们只在填充缓冲区后才开始发射,但是我需要这个observable从底层observable的第一个事件开始发射。

subject.someBufferingOperator()
    .subscribe([previousValue, currentValue] => {
        /** Do something */
    })
;
  

在第一次发射时,previousValue可能只是null

是否有一些内置的操作符可用于实现所需的结果?

2 个答案:

答案 0 :(得分:22)

实际上,就像pairwise()startWith()运营商配对一样简单:

subject
    .startWith(null) // emitting first empty value to fill-in the buffer
    .pairwise()
    .subscribe([previousValue, currentValue] => {
        if (null === previousValue) {
            console.log('Probably first emission...');
        }
    })
;

答案 1 :(得分:0)

这是 rxjs 6+ 的代码片段

subject
    .pipe(
       startWith(undefined),
       pairwise()
    )
    .subscribe(([previousValue, currentValue]) => {
        /** Do something */
    });

startWith() 中的值应该是 undefined,因为没有值。通常 null 被定义为“我们有一个值,这个值是空的”。