【发布时间】:2019-12-12 14:23:29
【问题描述】:
我有一个可观察的序列。插入第一个元素时,我想启动一个计时器并在计时器的时间跨度内批处理后续插入的元素。然后,在序列中插入另一个元素之前,计时器不会再次启动。
--------|=====timespan====|---------------|=====timespan====|-------------->
1 2 3 4 5 6
会产生:
[1,2,3,4,5], [6]
我尝试使用Observable.buffer() 和timespan,但从我的实验中,我可以看到,一旦我们订阅了可观察序列,计时器就会启动,并且在前一个计时器完成后立即重新启动。
因此,与前面的示例具有相同的序列并使用buffer() 和timespan,我会得到这样的结果:
|=====timespan====|=====timespan====|=====timespan====|=====timespan====|-->
1 2 3 4 5 6
会产生这个:
[1,2,3,4], [], [5,6], []
这与29858974 本质上是相同的问题,但针对的是java。
所以问题是,由于我不想过多地延迟我的流,我希望有一个非常短的计时器,并且该计时器会非常密集。我可以简单地过滤空列表,但我认为这对 CPU 影响太大。
【问题讨论】:
-
这听起来有点像 window() 函数。您是否检查过这是否满足您的需求?
-
不是 window 和 buffer() 完全一样,而是用 observables 作为输出吗?