2
我正在RxJava/Android中开发一个完整的应用程序,试图使事情成为最可能的Rx方式。RxJava运算符只在某些条件下用来链接observables
我想我达到了我想要的,但现在我遇到了一个问题,我确信存在一个更好的方法来做到这一点。 它包括:
- 从可观察到的
- 一个获取一个布尔值:如果这是真的,你都做了,返回true。 B:如果它是假的,请求一个请求(称之为firstRequest)并接收一个Observable。
- 答:同样的,如果它是真的,你完成了,返回true。 B:如果它是错误的,则发出另一个请求(secondRequest)。
- 答:如果它返回true,那么你就完成了。如果它是false,则启动processFailed();
现在我已经在一个非常简单的方式实现了它(和次优):
public void startProcess(){
dataRepository.getStatus()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(status -> {
if(status){
processCompleted();
} else {
makeFirstRequest();
}
});
}
private void makeFirstRequest(){
dataRepository.firstRequest()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(status -> {
if(status){
processCompleted();
} else {
makeSecondRequest();
}
});
}
private void makeSecondRequest(){
dataRepository.firstRequest()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(status -> {
if(status){
processCompleted();
} else {
processFailed();
}
});
}
我想知道如何将这些操作的方式,更有意义相结合(我偷看了combine
,但我认为这不是它的预期用例),我认为三次订阅都不正确。
我想过flatMapping(因为它有意义返回Observable),但嵌套的操作链(flatMap在flatMap内部的flatMap)让我觉得必须有一种更简单的方式来实现与某些运算符相同的结果。
在此先感谢。
哇,不知道defaultIfEmpty,它实际上链非常清楚。非常感谢! – dexafree