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