[RxSwift-Operator] debounce와 Throttle(latest: true)/Throttle(latest: false)
[1] debounce
- 타이머를 지정해두고 타이머가 끝난 시점에 가장 최근의 값을 방출해준다.
- 이벤트가 방출될때마다 타이머가 초기화된다.
- 사용예제: 타이머를 2초로 지정해두면, 사용자가 버튼을 폭풍 누르다가 더이상 버튼을 안누르고 2초가 지날때 가장 마지막 클릭 이벤트를 준다.
[2] throttle
- 타이머를 지정해두고 이벤트가 처음 방출되면 타이머 동안 어떤 이벤트도 방출되지 않는다.
- 이벤트가 방출될때마다 타이머가 초기화되지 않는다.
- 사용예제: 타이머를 2초로 지정해두면, 사용자가 버튼을 폭풍 누를때 처음 클릭 이벤트만 주고 2초동안 어떠한 클릭이벤트도 주지 않는다. (다만 latest를 어떻게 설정해주냐에 따라 조금 다른데 밑에서 확인!_!)
[2.1] throttle latest = true 일때
[2.2] throttle latest = false 일때
latest가 true이면 trottle에서 지정해준 타이머가 끝나는 시점에 발행된 마지막 값을 가져오고 false면 안가져온다
코드를 그림으로 표현해보면 다음과 같다
[3] 읽어보면 좋은 글
https://ehdrjsdlzzzz.github.io/2019/05/24/RxSwift-7/
ehdrjsdlzzzz.github.io
Rx사이트에 있는 그림보다 여기 블로그 그림이 더 이해가 쉽다...! 설명도 좋다 감사합니다 👏
다만 throttle은 latest=true일때랑 false일때랑 그림이 없어서(true일때 그림만 있음...ㅠㅠ)
https://medium.com/fantageek/throttle-vs-debounce-in-rxswift-86f8b303d5d4
Throttle vs Debounce in RxSwift
When I went to reactivex.io, I got a whole lot of confusion between the terms throttle and debounce in the reactive programming world. I…
medium.com
두 개의 연산자는 어떤 상황에서 유용하게 쓰이는지 알려주는 좋은 글
(사용자가 버튼을 막 눌러서 API Call이 엄청 많이 되는 것을 방지하기 등)