我有BehaviorSubject定期发出JavaScript对象。我想构造另一个observable,它将发出底层observable的先前值和当前值,以便比较两个对象并确定delta。
pairwise()
或bufferCount(2, 1)
运算符看起来很合适,但它们只在填充缓冲区后才开始发射,但是我需要这个observable从底层observable的第一个事件开始发射。
subject.someBufferingOperator()
.subscribe([previousValue, currentValue] => {
/** Do something */
})
;
在第一次发射时,
previousValue
可能只是null
。
是否有一些内置的操作符可用于实现所需的结果?
答案 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
被定义为“我们有一个值,这个值是空的”。