【问题标题】:How do I start an RxJava chain conditionally with a Completable into a Flowable?如何从 Completable 有条件地启动 RxJava 链到 Flowable?
【发布时间】:2018-11-27 09:10:42
【问题描述】:

我将如何根据条件使用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 的理解欠缺,所以我不能很好地解释它,但看起来条件是在流“之外”。

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

谢谢。

【问题讨论】:

  • 所以数据可以发出或不发出,对吧?
  • 是的,如果条件为真,它会下载一些东西,如果条件为假,它什么也不做。
  • 值得一提的是,这是一种基于意见的问题......

标签: android kotlin rx-java2


【解决方案1】:

这里可以使用Completable.create(...),这样就可以将数据加载逻辑封装在流里面了。

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

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

【讨论】:

  • 谢谢,这完全符合我的要求,而且更有意义!我会检查一下 Maybe 是否更合适。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
相关资源
最近更新 更多