我有一个Flowable
,在create()
中,我正在执行以下操作:
it.onNext(0)
Thread.sleep(500) // 500ms
it.onNext(500)
Thread.sleep(600) // 1100ms
it.onNext(1100)
Thread.sleep(600) // 1700ms
it.onNext(1700)
Thread.sleep(1200) // 2900ms
it.onNext(2900)
Thread.sleep(200) // 3100ms
it.onNext(3100)
Thread.sleep(200) // 3300ms
it.onNext(3300)
Thread.sleep(800) // 4100ms
it.onNext(4100)
然后我正在使用throttleFirst(1, TimeUnit.SECONDS)
来接收每发出1秒发出的第一个发射项。
经过一段时间,我认为我应该得到:
但是,除了 3100 的价值之外,我还能收到上述所有款项吗?可能是什么问题,我没有收到此值?
完整的源代码可以找到here。
答案 0 :(得分:0)
您误解了throttleFirst
的工作原理。
来自javadocs:
@param windowDuration
time to wait before emitting another item after emitting the last item
这意味着不应发射3100
,因为已经发射了2900
,并且两者之间只有200毫秒,而不是1整秒。
如果您希望像上面所写的那样获得输出,可以使用:
.window(1, TimeUnit.SECONDS)
.flatMap { it.take(1) }
代替throttleFirst
。
这会将值分成1秒间隔(如可观察到的),并获取每个窗口的第一个值。