2016-08-04 1 views
1

다음 시나리오에 적합한 RxJava 연산자는 무엇입니까?이 작업을 수행하는 데 올바른 RxJava 연산자는 무엇입니까?

토큰이 저장되어 있는지 확인하고 네트워크에서 가져 오지 않고 다른 네트워크 요청을 수행 할 수 있는지 확인하고 싶습니다.

나는 and/then/when 또는 filterflatMap의 조합으로 처리해야한다고 생각하지만 확실하지 않습니다.

+0

참고도 아주 간단해야한다 구조화 기쁘지 어떤 경우 나도 몰라 예. –

답변

2

해결 방법에는 여러 가지가 있습니다. 하나 더 일반적인 해결책은 Observable.concat 일 것입니다.

// Our sources (left as an exercise for the reader) 
Observable<Data> memory = ...; 
Observable<Data> disk = ...; 
Observable<Data> network = ...; 

// Retrieve the first source with data 
Observable<Data> source = Observable 
    .concat(memory, disk, network) 
    .first(); 

사례에 대해 두 가지 관찰 자료가 필요합니다. 로컬 저장소에 토큰이있는 경우 concat은 관찰 할 수있는 네트워크에 가입하지 않습니다. 블로그 게시물에서 더 많은 정보.

코드 샘플 this blog post.

1

이 찾고 있지만,이 cache` 네트워크의 캐싱 도움이 될 관측 가능한 요청 수 '있다는

Observable.just(getToken()) 
     .filter(token->Strings.isNullOrEmpty(token)) 
     .map(this::findNewToken) 
     .cache() 
     .subscribe(token -> println("Your new Token") 
관련 문제