簡體   English   中英

如何從更快的原始流中延遲發出最新價值?

[英]How to emit latest value with delay from faster original flow?

我有 2 個流程。 第一個流每 50 毫秒更新一次。 我有第二個流量等於第一個流量,但我希望它每 300 毫秒從原始流量中產生最新值。 我找到了流的debounce擴展,但它不起作用(來自文檔的注釋):

Note that the resulting flow does not emit anything as long as the original flow emits items faster than every timeoutMillis milliseconds.

因此,當我嘗試使用去抖動每 300 毫秒發射一次值時,它根本不會發射,因為原始流量比我需要的要快。 那么我怎樣才能做這樣的事情:

  1. 延遲 300ms
  2. 檢查原始流的最新值
  3. 發出這個值
  4. 重復

我現在的流程:

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

val cameraBearingFlow = orientationFlow.debounce(300ms)

PS 這種方法不適合,因為我們延遲了值,所以它在 300 毫秒后就不新鮮了。 我需要在 300 毫秒后獲取最新值:

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

你需要sample而不是譴責

val f = fastFlow.sample(300)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM