如何有条件地将Completable转化为Flowable来启动RxJava链?

时间:2018-11-27 09:10:43

标签: android kotlin rx-java2

如何根据条件从Completable开始连锁?

我在下面的getThings()中有可用的代码,但是根据我所看到的示例,它感觉像不正确地使用RxJava。在此示例中,downloadThings()getCachedThings()的内容无关紧要,但是返回类型无关。

fun downloadThings(): Completable {
    ...
}

fun getCachedThings(): Flowable<List<Task>> {
    ...
}

fun getThings(): Flowable<List<Task>> {
   return if (condition) {
               downloadThings()
           } else {
               Completable.complete()
           }.andThen(getCachedThings())
}

我缺乏对RxJava的理解,所以我不能很好地解释它,但是看起来情况是在流“外部”。

是否有更正确的方法来执行此操作?或者我的操作方式还可以吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

Completable.create(...)可以在这里使用,因此您可以将数据加载逻辑封装在流中。

fun getThings(): Flowable<List<Task>> {
    Completable.create {
        if (condition) { downloadThings() }
        it.onComplete()
    }.andThen(getCachedThings())
}

那是关于重构而没有逻辑损坏。否则,分析Maybe是否符合您的逻辑就很有意义。