我希望在调用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
}
})
答案 0 :(得分:1)
如果您立即发出'12345'值,那么解决方案就是微不足道的。只需将此observable与timer
合并,您就会得到这种行为。但是,我将假设你传递给create
的OnSubscribe方法中的逻辑正在做一些工作,并且一旦准备就会发出值(即网络请求)。在这种情况下,您需要同时使用flatMap
和merge
运算符。这样的事情就足够了。
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发出的每个项目,并为每个项目创建延迟的第二个响应。因此,如果您计划从源可观察数据中发出多个值,则需要考虑这一点。