首页 > 解决方案 > 如何从 Completable 有条件地启动 RxJava 链到 Flowable?

问题描述

我将如何开始一个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 的理解,所以我不能很好地解释它,但看起来条件是在流“之外”。

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

谢谢你。

标签: androidkotlinrx-java2

解决方案


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

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

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


推荐阅读