RxJava/Android에서 전체 응용 프로그램을 개발하여 가능한 가장 Rx 방식으로 만들려고합니다.특정 조건에서만 관찰 가능 객체를 연결하는 데 사용할 RxJava 연산자
나는 내가 원하는 것을 이루고 있다고 생각하지만, 지금은 더 나은 방법이 있다고 확신하는 문제가 발생했습니다. 그것은 구성
- 는 관찰 가능한
- A로부터 부울 받기 : 그것이 사실이라면, 당신이 완료, true를 돌려줍니다. B : 거짓이면 요청 (firstRequest라고 함)하고 Observable을 수신합니다.
- A : 사실이라면, 당신은 끝났습니다. B : 거짓이면 다른 요청을하십시오 (secondRequest).
- A : 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
을 엿보았지만, 이것에 대한 의도 된 유스 케이스는 아니라고 생각합니다.) 그리고 3 번 가입하는 것은 옳지 않다고 생각합니다.
flatmapping (Observable을 반환하는 것이 좋습니다)에 대해 생각했지만 중첩 된 작업 체인 (flatMap 내의 flatMap 내의 flatMap)은 일부 연산자에서 동일한 결과를 얻는 간단한 방법이 있어야한다고 생각하게했습니다 .
미리 감사드립니다. 구조에
와우, defaultIfEmpty에 대해 알지 못했지만 실제로는 매우 명확하게 연결됩니다. 고마워요! – dexafree