如何构建具有自定义数字和不同延迟的Observable?

时间:2015-11-13 15:42:07

标签: java scala reactive-programming rx-scala reactivex

为了用rxscala测试我的反应程序,我需要构建一个Observable

val numberStream: Observable[Int] = Observable.???()

其中

  1. 发布号码1
  2. 然后等待1s
  3. 发布号码4
  4. 然后等待3s
  5. 发布号码2
  6. 然后等待2s
  7. 我有一个丑陋的解决方案,ThreadReplaySubject

    val subject: Subject[Int] = ReplaySubject()
    val numberStream: Observable = subject
    
    new Thread(new Runnable {
        def run = {
            subject.onNext(1)
            Thread.sleep(1000)
            subject.onNext(4)
            Thread.sleep(3000)
            subject.onNext(2)
            Thread.sleep(2000)
        }
    }).start()
    

    有没有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

你可以将几个Observable与延迟连接在一起,最终的Observable为empty,订阅延迟。

val numberStream = (
     Observable.just(1) ++ 
     Observable.just(4).delay(1.second) ++
     Observable.just(2).delay(3.second) ++
     Observable.empty.delaySubscription(2.second))

作为旁注,如果您正在测试,则应使用TestScheduler作为delay的第二个参数传递。{/ p>