Java 在特定时间后调用onNext后发出值
我想在调用onNext 10秒后发出一个随机值。因此,12345将调用onNext,10秒后,应调用onNext以获取随机数。使用RxJava实现这一点的最佳方法是什么?提前谢谢Java 在特定时间后调用onNext后发出值,java,rx-java,Java,Rx Java,我想在调用onNext 10秒后发出一个随机值。因此,12345将调用onNext,10秒后,应调用onNext以获取随机数。使用RxJava实现这一点的最佳方法是什么?提前谢谢 Observable.create(subscriber -> { subscriber.onNext(12345); }).subscribeOn(...) .observeOn(...) .subscribe(new Subscriber<Long>(){ @Override
Observable.create(subscriber -> {
subscriber.onNext(12345);
}).subscribeOn(...)
.observeOn(...)
.subscribe(new Subscriber<Long>(){
@Override
public void onNext(Long aLong) {
//Do Something
}
})
Observable.create(订户->{
认购人.onNext(12345);;
}).subscribeOn(…)
.观察(…)
.subscribe(新订户(){
@凌驾
下一页的公共空白(长期){
//做点什么
}
})
如果您立即发出“12345”值,那么解决方案就微不足道了。只需将此可观察对象与计时器
合并,就可以得到这种行为。但是,我将假设您传递给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
}
})
Observable.create(订户->{
认购人.onNext(12345);;
})
.flatMap(值->可观察的.just(值)
.mergeWith(Observable.timer(10,TimeUnits.SECONDS).map(/*在此处定义“随机”值*/))
)
.subscribeOn(…)
.观察(…)
.subscribe(新订户(){
@凌驾
下一页的公共空白(长期){
//做点什么
}
})
它会把你的值转换成可观察的值,它会立即发出这个值,并启动一个计时器10秒以发出其他东西
注意:请注意,这将带走你观察到的每一项发射,并为每一项产生延迟的第二次响应。因此,如果您计划从源observable发出多个值,您需要考虑这一点。您可以将此逻辑放在subscriber->{}方法中。计时器之类的东西可以完成这项工作。这是绝对的选择,但我不认为RxJava是用来处理开箱即用的复杂情况的。在一个复杂的情况下,用纯Java编写如何发送数据的逻辑是一个好主意。难道没有运算符或类似的东西吗?这种情况可能非常特殊,但可能有人有一个好主意,所以这是一个特别糟糕的建议。使用RxJava的主要原因之一是利用其将复杂用例转换为简单流组合的能力。谢谢。这是一个完美的解决方案。