employeeChanged: Subject<any> = new Subject<any>();
setInterval(() => {
this.employeeChanged.next(1);
this.employeeChanged.next(1);
this.employeeChanged.next(2);
this.employeeChanged.next(2);
this.employeeChanged.next(3);
this.employeeChanged.next(3);
},1000);
this.employeeChanged.pipe(debounceTime(1000),distinctUntilChanged()).subscribe(((key) => {
console.log(`Employee update: ${key}`);
}));
我的示例如下所示。我想按观察对象提供的键获取最新值,因此我的输出看起来像这样
Employee update: 1
Employee update: 2
Employee update: 3
我需要使用哪个运算符来实现?
答案 0 :(得分:2)
由于您在debounceTime
和setInterval
延迟中使用了相同的值,因此debounceTime
时间跨度不会过去,也不会发出任何值。
现在,有两个选项:
debounceTime
计时器,但由于去抖动会忽略近距离发射的值,因此只会分派最新值debounceTime
运算符并获得所需的行为我假设您希望排放之间有某种延迟,您可以使用bufferTime
收集一段时间内的不同值,然后使用mergeAll
来平坦化收集的值
employeeChanged
.pipe(
distinctUntilChanged(),
bufferTime(1000),
mergeAll()
)
.subscribe(key => {
console.log(`Employee update: ${key}`);
});