kotlin 如何从更快的原始流中延迟地发出最新值?

deikduxw  于 2022-12-19  发布在  Kotlin
关注(0)|答案(1)|浏览(102)

我有2个流。第一个流每50ms更新一次。我有第二个流,它等于第一个流,但我希望它每300ms从原始流产生最新值。我发现debounce扩展流,但它不工作(来自文档的注解):
Note that the resulting flow does not emit anything as long as the original flow emits items faster than every timeoutMillis milliseconds.
因此,当我尝试通过去抖每300 ms发射一次值时,它根本不发射,因为原始流比我需要的更快。那么,我如何才能做出这样的东西呢?
1.延迟300ms
1.检查最新值的原始流量
1.发出此值
1.重复
我现在的流程:

// fast flow (50ms)
val orientationFlow = merge(_orientationFlow, locationFlow)

val cameraBearingFlow = orientationFlow.debounce(300ms)

P.S.这种方法不适用,因为我们延迟了值,所以300ms后它不是最新的。我需要在300ms后获得最新的值:

val cameraBearingFlow = azimuthFlow.onEach { 
        delay(ORIENTATION_UPDATE_DELAY)
        it
    }
yyyllmsg

yyyllmsg1#

你需要sample而不是谴责

val f = fastFlow.sample(300)

相关问题