2016-08-16 1 views
6

다음 달성하기 위해 몇 가지 방법이있다. 내가 원하는 것은 다음입니다 :RXJava (각 관찰을 위해 CONCAT 같은,하지만 onCompleted과) 다른 후 여러 관찰 가능한 실행

  • 첫 번째 관찰
  • 를 실행하는 두 번째 관찰
  • 두 번째 관찰
  • onCompleted을 관찰 처음 실행할 관찰
  • onCompleted을 관찰 세 번째 관찰을 실행
  • 제 3 관측 가능 범위의 onCompleted을 관찰하십시오.

이것은 concat으로 수행 할 수 있지만 마지막으로는 onCompleted 만 볼 수 있습니다.

미운 솔루션 난 그냥 전 하나의 onCompleted 이벤트에서 다음 obersvable을 시작하면

나도 알아, 내가, 그것을 달성 할 수있다.

질문

도 함께 관찰 가능한 임의의 수와이를 달성하기 위해 다른 방법이 있나요? 이건 정말 추한 외모와 깊은 체인이 ... 덜 분명이 가져

편집을 간다 나는 onCompleted 이벤트에서 모두 함께이 체인 피하려고 - 유스 케이스

  • 첫째, 내 앱이 마지막으로로드 된 데이터를 표시하는 데이터를 내보내려고합니다. (데이터를 디스크로 serialize합니다) => 이유는 항상 빠른 앱이 항상 시작되기를 원합니다.
  • 빈 상태에서 최신 데이터를로드하는 데이터로드의 두 번째 실행
  • 그런 다음 최신 데이터의 누락 된 더 깊은 데이터를로드하기 위해 세 번째 데이터로드를 수행합니다.

데이터를로드 할 때마다 UI를 지속적으로 업데이트하고 싶습니다. 완결 된

+0

'onCompleted'이벤트를 여러 번 관찰하여 정확히 무엇을하려고합니까? 여기에 예제 유스 케이스를 줄 수 있습니까? –

+0

사용 사례와 함께 내 질문 수정 ... – prom85

+1

안녕하세요, 해결책이 있습니까? –

답변

0

나는 대답은 concatMap 일 수 있다고 생각합니다. concatMap하면 관찰 가능한을 연결 한 번 가입, 그래서 당신은 코드 뭔가처럼 될 수있어 수 있습니다 : 나는 코드가 도움이 아래 희망

Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 
    .concatMap(integer -> Observable.just(integer) 
      .observeOn(Schedulers.computation()) 
      .concatMap(i -> { 
       try { 
        Thread.sleep(new Random().nextInt(1000)); 
        return Observable.just(2 * i); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
        return Observable.error(e); 
       } 
      })) 
    .subscribe(System.out::println, 
      Throwable::printStackTrace, 
      () -> System.out.println("onCompleted")); 
9

.

Observable<MyData> observable1 = ...; 
Observable<MyData> observable2 = ...; 
Observable<MyData> observable3 = ...; 

Observable 
     .concat(observable1.doOnCompleted(this::onCompleteObservable1), 
       observable2.doOnCompleted(this::onCompleteObservable2), 
       observable3.doOnCompleted(this::onCompleteObservable3)) 
     .subscribeOn(Schedulers.newThread()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(...); 

다음은 샘플 메소드입니다.

void onCompleteObservable1() { 
    //do some work 
} 

void onCompleteObservable2() { 
    //do some work 
} 

void onCompleteObservable3() { 
    //do some work 
} 
관련 문제