在特定时间之后调用onNext之后发出一个值

时间:2017-01-30 11:50:42

标签: java rx-java

我希望在调用onNext后10秒发出一个随机值。所以onNext将被调用12345和10秒后onNext应该被调用一个随机数。使用RxJava实现此目的的最佳方法是什么?提前致谢。

Observable.create(subscriber -> {
    subscriber.onNext(12345);
}).subscribeOn(...)
.observeOn(...)
.subscribe(new Subscriber<Long>(){
    @Override
    public void onNext(Long aLong) {
        //Do Something
    }
})

1 个答案:

答案 0 :(得分:1)

如果您立即发出'12345'值,那么解决方案就是微不足道的。只需将此observable与timer合并,您就会得到这种行为。但是,我将假设你传递给create的OnSubscribe方法中的逻辑正在做一些工作,并且一旦准备就会发出值(即网络请求)。在这种情况下,您需要同时使用flatMapmerge运算符。这样的事情就足够了。

Observable.create(subscriber -> {
    subscriber.onNext(12345);
})
  .flatMap(value -> Observable.just(value)
        .mergeWith(Observable.timer(10, TimeUnits.SECONDS).map(/* define your "random" value here */))
  )
  .subscribeOn(...)
  .observeOn(...)
  .subscribe(new Subscriber<Long>(){
      @Override
      public void onNext(Long aLong) {
        //Do Something
      }
  })

它将获取您的值并将其转换为可观察的,立即发出此值并启动计时器10秒钟以发出其他内容。

注意: 请注意,这会占用您的observable发出的每个项目,并为每个项目创建延迟的第二个响应。因此,如果您计划从源可观察数据中发出多个值,则需要考虑这一点。