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