2016-09-06 3 views
1

일반적으로 나는 한 번만 실행, 관찰을 만들 RX 서브 관찰 - 실행 한 번만

Observable observable = someObservable.replay().refCount(); 

를 사용합니다. - 완벽하게, 내가 원하는대로

observable.observeOn(Schedulers.io()) 
    .subscribeOn(AndroidSchedulers.mainThread()) 
    .subscribe(...); 

observable.observeOn(Schedulers.io()) 
    .subscribeOn(AndroidSchedulers.mainThread()) 
    .subscribe(...); 

observable 한 번만 실행됩니다 : 나는 다음과 같이 observable 여러 번에 가입 할 경우 잘 작동합니다. 지금 다음 작업을 수행하는 경우 :

Observable obs1 = observable.map(...); // call some operators 
Observable obs2 = observable.map(...); // call some operators 

obs1.observeOn(Schedulers.io()) 
    .subscribeOn(AndroidSchedulers.mainThread()) 
    .subscribe(...); 

obs2.observeOn(Schedulers.io()) 
    .subscribeOn(AndroidSchedulers.mainThread()) 
    .subscribe(...); 

는 그 다음 observable 두 번 실행됩니다. 어떻게 이런 일이 일어나지 않을지 확신 할 수 있습니까?

답변

2

내가 원하는 것은 .take(1) 연산자를 추가하는 것입니다. 이 방법은 observable에서 무엇인가를 읽으면 onComplete를 호출합니다.

+0

전체 시퀀스를 재생하고 싶습니다. 아무 것도 잃고 싶지 않습니다. 내 관찰 가능 항목에 의해 방출되는 모든 n 항목은 구독자 또는 모든 체인으로 방출되어야하며 관측 대상은 – prom85

+1

에 사용됩니다. 이해합니다 .cache() 연산자를 사용할 수 있습니다. 이렇게하면 첫 번째 실행은 관찰 가능을 생성하고 다른 구독자는 똑같은 캐시 된 방출을 얻습니다. .cache는 상태를 유지하는 것으로 생각하십시오. – FriendlyMikhail

+0

이 작동 중입니다. 나는 아직도 혼란 스럽다. 왜냐하면'refCount'가 작동하지 않는 이유는 ...'refCount'와 같은 것처럼 보입니다. 왜냐하면 제가 직접 observable에 가입하고 있다면 (나는 아직 그것에 대해 읽지 않았습니다) ... 'autoConnect'는 대신 잘 작동합니다 ... – prom85