Throttling
정해진 시간동안 발생된 걸 무시를 할 수 있는 함수이다.
ThrottleLast()
: 정해진 시간안에 마지막 내용만 리턴한다.ThrottleFirst()
: 정해진 시간안에 처음 내용만 리턴한다.ThrottleWithTimeout()
: debuoune 와 유사하며 일정시간동안 모든 아이템은 무시한다.
우선 일반적인 형태를 보자.
Observable<String> source1 = Observable.interval(100 , TimeUnit.MILLISECONDS)
.map(i-> (i+1) * 100)
.map(i-> "Source 1 " + i)
.take(10);
Observable<String> source2 = Observable.interval(300 , TimeUnit.MILLISECONDS)
.map(i-> (i+1) * 300)
.map(i-> "Source 2 " + i)
.take(3);
Observable<String> source3 = Observable.interval(2000 , TimeUnit.MILLISECONDS)
.map(i-> (i+1) * 2000)
.map(i-> "Source 3 " + i)
.take(2);
//concat 으로 순서대로 진행시킨다.
Observable.concat(Arrays.asList( source1 , source2 , source3))
.subscribe( System.out::println);
sleep
(6000);
............
Source 1 100
Source 1 200
Source 1 300
Source 1 400
Source 1 500
Source 1 600
Source 1 700
Source 1 800
Source 1 900
Source 1 1000
Source 2 300
Source 2 600
Source 2 900
Source 3 2000
Source 3 4000
throttleLast()
마지막 아이템만 리턴한다. ( sample() 이라고 불린다.)
Observable.concat(Arrays.asList( source1 , source2 , source3))
.throttleLast( 1, TimeUnit.SECONDS)
.subscribe( System.out::println);
........
Source 1 900 <- 1초안에서 제일 마지막 아이템만 리턴합니다.
Source 2 900 <- 상동
Source 3 2000 <- 1초 안에 없다면 효과적으로 최신껄 끌어내는 걸 볼수 있다.
그럼 시간을 좀 더 늘릴 경우는 방출되는 아이템이 더 작아지는 걸 볼수 있다.
.throttleLast( 2, TimeUnit.SECONDS)
.........
Source 2 900
Source 3 2000
throttleFirst()
일정시간안에 최초 방출 아이템만 리턴한다.
Observable.concat(source1, source2, source3)
.throttleFirst(1, TimeUnit.SECONDS)
.subscribe(System.out::println);
........
SOURCE 1: 100
SOURCE 2: 300
SOURCE 3: 2000 <-- 1초안에 최초 아이템 리턴
SOURCE 3: 4000 <-- 다시 1초안에 최초 아이템 리턴
ThrottleWithTimeout() < debound() >
일정 시간에 있는 모든 아이템을 무시한다.
.throttleWithTimeout(1, TimeUnit.SECONDS)
..........
SOURCE 2: 900
SOURCE 3: 2000
SOURCE 3: 4000
'스터디 > RxJava2' 카테고리의 다른 글
[RxJava2]Backpressure 들어가기 전 (0) | 2017.10.22 |
---|---|
[RxJava2]switchMap 에 대해서 알아보자. (0) | 2017.10.22 |
[Rxjava2]Windowing을 알아보자. (0) | 2017.10.22 |
[RxJava2]Buffering 에 대해서 알아보자. (0) | 2017.10.22 |
[Rxjava2] 예제로 배우는 UnicastSubject (0) | 2017.10.22 |