【发布时间】:2021-09-30 04:09:40
【问题描述】:
如果有一些事件触发,我有一个 source$ observable 收集数据流。我想将这些在指定时间发生的数据收集到数组中。
const eventSubject = new Subject();
eventSubject.next(data);
const source$ = eventSubject.asObservable();
source$.pipe(takeUntil(destroyed$)).subscribe(
data => {
console.log(data);
}
);
上面的 source$ 立即处理发出的数据。
现在我想改进这一点,等待几秒钟并收集在指定时间发生的所有数据并发出一次。所以我修改为与 bufferTime 一起使用,如下所示:
const source$ = eventSubject.asObservable();
source$.pipe(takeUntil(destroyed$), bufferTime(2000)).subscribe(
data => {
console.log(data);
}
);
在使用 bufferTime 进行测试后,我发现它每 2 秒发出一次,即使源没有接收数据。如果源没有接收到数据,它会发出空对象。
我想要的只是当 source$ 接收数据,然后开始缓冲 2s,然后发出值。如果 source$ 没有接收到数据,它不应该发出任何东西。
我检查了 bufferWhen、windowWhen、windowTime 并不都符合我的要求。它们在每个指定的时间间隔发射。
有没有其他操作员可以做我想做的事?
非常感谢。
【问题讨论】:
标签: rxjs