簡體   English   中英

帶有回放的RxScala Observables

[英]RxScala Observables with replay

我試圖了解RxScala中的replay 我創建一個這樣的可觀察對象:

lazy val toyObservable : Observable[Int] = {
    val coldObservable : Observable[Int] = intPerSecond
    val hotObservable : ConnectableObservable[Int] = coldObservable.publish
    val cachedObservable = hotObservable //.replay(3)   //<<<<<<<<< ODD THING 
    cachedObservable.connect
    cachedObservable
}

其中intPerSecond每秒從0開始每秒發射一個整數。第一個訂閱的觀察者確實每秒看到一個整數。 如果第二個觀察者在t = 6秒時加入,則從那一刻起,他們都將以一秒鍾的間隔看到匹配的流6 ... 7 ... 8 ... 9...。 符合預期。

現在,如果我添加.replay(3)我希望第二個觀察者加入時,他會看到3456 ... 7 ... 8 ... 9,即他會立即從中獲得3個整數。緩存,然后以每秒生成的速度每秒接收一次。 但是相反,現在沒有觀察者看到任何東西。 我的語法是否錯誤?

您忘記調用hotObservable.connect 以下代碼完全輸出您想要的內容:

import rx.lang.scala._
import rx.lang.scala.observables._
import scala.concurrent.duration._
val intPerSecond = Observable.interval(1.seconds).map(_.toInt)
val coldObservable : Observable[Int] = intPerSecond
val hotObservable : ConnectableObservable[Int] = coldObservable.publish
val cachedObservable = hotObservable.replay(3)
cachedObservable.connect
hotObservable.connect
cachedObservable.foreach(i => println(s"1: $i"))
Thread.sleep(6000)
cachedObservable.foreach(i => println(s"2: $i"))

暫無
暫無

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

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