如何在 RxJava 流中间有条件地添加异步操作?
How can I conditionally add an asynchronous operation in the middle of an RxJava stream?
这是我正在尝试做的事情的简化版本(使用 Kotlin 和 RxJava)
makeServerCall()
.doOnNext {
doStuff(it)
}
//TODO: if it == 0, call asyncOperation() and wait for its callback to fire
//before running the rest of the stream. Otherwise immediately run the rest
//of the stream
.flatMap {
observable1(it)
observable2(it)
Observable.merge(
getSpotSearchObservable(observable1),
getSpotSearchObservable(observable2)
}
.subscribeBy(onNext = {
allDone()
view?
})
如何挤入对 asyncOperation()
的调用并让流的其余部分等待其回调触发,但仅在满足特定条件时才触发?这似乎是 Rx 中的一个微不足道的操作,但没有想到明显的解决方案。
FlatMap啦!
.flatMap {
if (it == 0) {
return@flatMap asyncOperation()
.ignoreElements()
.andThen(Observable.just(0))
}
return@flatMap Observable.just(it)
}
.flatMap {
observable1(it)
observable2(it)
Observable.merge(
getSpotSearchObservable(observable1),
getSpotSearchObservable(observable2)
)
}
这是我正在尝试做的事情的简化版本(使用 Kotlin 和 RxJava)
makeServerCall()
.doOnNext {
doStuff(it)
}
//TODO: if it == 0, call asyncOperation() and wait for its callback to fire
//before running the rest of the stream. Otherwise immediately run the rest
//of the stream
.flatMap {
observable1(it)
observable2(it)
Observable.merge(
getSpotSearchObservable(observable1),
getSpotSearchObservable(observable2)
}
.subscribeBy(onNext = {
allDone()
view?
})
如何挤入对 asyncOperation()
的调用并让流的其余部分等待其回调触发,但仅在满足特定条件时才触发?这似乎是 Rx 中的一个微不足道的操作,但没有想到明显的解决方案。
FlatMap啦!
.flatMap {
if (it == 0) {
return@flatMap asyncOperation()
.ignoreElements()
.andThen(Observable.just(0))
}
return@flatMap Observable.just(it)
}
.flatMap {
observable1(it)
observable2(it)
Observable.merge(
getSpotSearchObservable(observable1),
getSpotSearchObservable(observable2)
)
}