Как я могу объединить 2 цепочки кода в RxAndroid2? - PullRequest
1 голос
/ 07 мая 2020

Мне нужно запросить некоторые данные из общих настроек и выполнить некоторые проверки, обновить общие настройки, а затем вернуть логическое значение, которое мне нужно сохранить в потоке вычислений. И если возврат верен, мне нужно продолжить с приведенным ниже кодом, иначе мне нужно call doSomething2 () Мой вопрос в том, как мне объединить эти две части кода, где первая часть - Flowable.just(isPayable()), которая должна быть подписана в вычислительном потоке и на основе возвращаемого значения продолжить существующее решение

 .update(info)
 .observeOn(mMainThreadScheduler)
 .subscribe(() -> doSomething1{
           }),
          (Throwable throwable) -> doSomething2())

1 Ответ

0 голосов
/ 12 мая 2020

не используйте Flow.just(isPayable()) - он может не выполняться в планировщике вычислений. либо используйте Flow.defer(()->Flow.just(isPayable())), либо

Flow.fromCallable(() ->isPayable() )

и в результате:

Flow.fromCallable(() ->isPayable() )
.flatMap(value->
  if(value){ doSomething1() }else { doSomething2() }
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({},{})
)

в качестве альтернативы, если вы выполните doSomething1 () / doSomething2 (), сделайте некоторые вещи пользовательского интерфейса , вы также можете пометить isPayable () == false как ошибку, для этого: Single.fromCallable (() -> isPayable ()) .map {value-> if (value) return value else throw Exception ("not payable" )} .subscribeOn (Schedulers.computation ()) .observeOn (AndroidSchedulers.mainThread ()) .subscribe ({doSomething1 ()}, {doSomething2 ()})

...