Как запустить цепочку RxJava условно с Completable в Flowable? - PullRequest
0 голосов
/ 27 ноября 2018

Как мне начать цепочку с 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 голосов
/ 27 ноября 2018

Completable.create(...) может использоваться здесь, так что вы можете инкапсулировать логику загрузки данных в потоке.

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

Это если речь идет о рефакторинге без повреждения логики.В противном случае очень важно проанализировать, соответствует ли Maybe вашей логике.

...