2017-01-30 42 views
3

我想在调用onNext之后10秒发出一个随机值。所以onNext将被调用12345,10秒后onNext应该被调用一个随机数。使用RxJava实现这一点的最佳方式是什么?提前致谢。在特定时间之后调用onNext之后发出一个值

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

您可以将此逻辑放入订阅者 - > {}方法中。计时器或其他东西可以完成这项工作。这是合理的选择,但我不认为RxJava是用来处理复杂的盒子的。当您的数据是一个复杂的案例时,编写您的纯Java数据发布逻辑是个好主意。 –

+0

是不是有一个运营商或东西的相同? – Simar

+0

这种情况下,接口是一个非常特殊的,但也许有人有一个好主意在SO –

回答

1

如果您立即发出'12345'值,那么解决方案很简单。只需将此可观察项与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秒发出别的一个计时器。

注:当心,这将抓住每一个项目你观察到的发射,并为他们每个人的这种延迟的第二反应。因此,如果您计划从源观察值中发射多个值,则需要考虑这一点。

+0

谢谢。这是一个完美的解决方案。 – Simar

相关问题