Observable.create(s->{
s.onNext(1);
s.onCompleted();
T fromCache = getFromCache(SOME_KEY);
if(fromCache != null){
// 동기방식으로 처리
s.onNext(fromCache);
s.onCompleted();
} else {
// 비동기방식으로 처리
getDataAsynchronously(SOME_KEY)
.onResponse(v->{
s.onNext(v);
s.onCompleted();
})
.onFailure(exception ->{
s.onError(exception);
}
);
}
}).subscribe();
1) 동기방식을 사용하는 이유
map(), filter(), take(), flatMap(), groupBy() 같은 연산자를 이용하기 위해서,
(실제로 이러한 연산자들은 대부분 동기방식이며 onNext 안에서 이벤트가 지나가는 동안 동기 방식으로 계산을 수행한다.)
...
s.onNext(1); <-- 이벤트1
s.onNext(2); <--이벤트2
s.onNext(3); <--이벤트3
API 함수 |
설명 |
|
map() |
|
|
filter() |
|
|
take() |
|
|
merge() | 여러 Observable을 하나처럼 다루기(비동기스트림을 모아 동시 수행) | |
flatMap() |
|
|
groupBy() |
|
|
'Android > RxJava' 카테고리의 다른 글
RxAndroid (RxJava) 에서 람다를 통해 번잡한 문법을 간단히 (0) | 2018.10.31 |
---|---|
rxandroid 튜토리얼 (0) | 2018.10.31 |
댓글