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

标签 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
    }
})

最佳答案

如果您立即发出“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 发出多个值,则需要考虑到这一点。

关于java - 在特定时间后调用 onNext 后发出一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41935228/

相关文章:

java - 如何在不启动新进程的情况下再次订阅 Observable?

java - vim 中的即时 Java 语法检查

java - jackson 不匹配输入异常 : No content to map due to end-of-input

本地容器上的java spring boot应用程序无法访问aws

java - 链接没有显着返回值的 Observable

android - RxAndroid 一个接一个地调用网络调用

java - 使用泛型将类类型从一个方法传递到另一个方法

java - 使用 jar 中的拦截器绑定(bind)

java - 发射对象数组,每个对象之间有延迟

android - 如何在 RxJava 流中间有条件地添加异步操作?