我如何在RxAndroid2中合并2条代码链?

问题描述 投票:1回答:1

我需要从共享首选项中请求一些数据,并进行一些检查以更新共享首选项然后返回布尔值,我需要将其保留在Computation线程中。如果返回值为true,则需要继续下面的代码,否则需要调用doSomething2()我的问题是我应该如何合并这两个代码部分其中第一部分是Flowable.just(isPayable()),应在计算线程中进行预订,并根据返回值继续使用现有的解决方案

 .update(info)
 .observeOn(mMainThreadScheduler)
 .subscribe(() -> doSomething1{
           }),
          (Throwable throwable) -> doSomething2())
android rx-java2
1个回答
0
投票

请勿使用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()做一些UI事情,您也可以将isPayable()== false标记为错误,以执行以下操作:Single.fromCallable(()-> isPayable()).map {value-> if(value)返回值else抛出Exception(“ not payable”)}.subscribeOn(Schedulers.computation()).observeOn(AndroidSchedulers.mainThread()).subscribe({doSomething1()},{doSomething2()})

© www.soinside.com 2019 - 2024. All rights reserved.