如何根据条件以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的了解不足,所以我无法很好地解释它,但是看起来情况似乎在流的“外部”。

有没有更正确的方法可以做到这一点,或者我的工作方式还可以吗?

谢谢。

最佳答案

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

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

那就是关于重构而没有逻辑损坏的情况。否则,分析 Maybe 是否符合您的逻辑相当重要。

10-08 16:07