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

标签 android kotlin rx-java rx-android rx-kotlin

这是我正在尝试做的事情的简化版本(使用 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)
    )
}

关于android - 如何在 RxJava 流中间有条件地添加异步操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46224173/

相关文章:

android - onActivityCreated 方法在一个 fragment 中调用,但不在其他 fragment 中调用

java - 使用<include>标签时如何使用Onclick事件

list - 在 Kotlin 中对 MutableList 中的数据进行排序

android - 将 AsyncTask 转换为 RxAndroid

android - RxJava - 组合多个/不同的网络服务调用

android - 是否可以以编程方式滚动到 LinearLayout 中的特定元素?

android - 即使在使用导航 2.2.1 后仍然有错误 no current navigation node

java - Dagger2 - 应用程序不能依赖于多个作用域组件

android - 如何在Kotlin中使String不以结尾

java - Observable.never() 函数的实际用途是什么?