debounceOn, delayOn & throttleOn

선택자가 정하는 시간: 값마다 언제 내보낼지를 정하는 스트림을 고릅니다 — Duration 없이 debounce, delay, throttle.

FxEvents<T> FxEvents<T>.debounceOn(Stream<void> Function(T value) selector) // chain (events) FxEvents<T> FxEvents<T>.delayOn(Stream<void> Function(T value) selector) FxEvents<T> FxEvents<T>.throttleOn(Stream<void> Function(T value) selector, {bool leading = true, bool trailing = false})

강의

Duration 형태는 이미 debounce, throttle, delay에 있습니다 — 고정된 시계, 모든 값에 같은 대기. xOn 가족은 그 시계를 선택자에 넘깁니다: 값마다 스트림을 만들고, 그 스트림의 첫 이벤트가 값이 나갈 순간입니다. 300ms 대신 포커스가 떠나는 순간을 기다리고, 긴 검색어는 더 길게 디바운스하고, 타이머가 아니라 버튼이 눌릴 때 붙든 값을 풀어 주세요.

debounceOn(selector)는 그 스트림을 잠잠한 창으로 쓰는 트레일링 디바운스입니다. 더 새로운 값은 이전 내부를 중단하고 새것을 시작하며, 내부의 첫 next가 대기 중인 값을 내보내고, next 없이 완료된 내부는 그 값을 버립니다. 소스가 닫힐 때 아직 대기 중인 값은 흘려보내져, Duration debounce와 같습니다.

delayOn(selector)모든 값을 자기 내부가 발화할 때까지 붙듭니다 — 중단이 없으므로, 선택자가 순서를 바꾸면 값도 순서를 바꿉니다. Rx의 delayWhen과 같습니다. 닫기는 아직 끝나지 않은 내부를 기다리고, 에러는 즉시 전달됩니다 — 붙들어 둘 가치가 있는 것은 데이터뿐이니까요.

throttleOn(selector)는 내부 창마다 이벤트를 최대 하나 내보냅니다: leading(기본 켜짐, 스트림 형태 throttle과 같음)은 창의 첫 값을 지키고, trailing은 내부가 발화할 때 — 또는 창 한가운데 소스가 닫힐 때 — 본 가장 새로운 값을 지킵니다. fxdart 이벤트 레이어, Rx의 선택자 형태 debounce, delayWhen, throttle을 따랐습니다.

데모 1 · 버스트, 선택자가 발화할 때 풀기

데모 2 · 알림 스트림이 가라고 할 때까지 붙들기

직접 해 보기

연습: 내부 창마다 스크롤 오프셋 하나, 리딩 엣지.

관련 항목: debounce — Duration 형태, 그리고 콜백 래퍼 · throttle — Duration 형태, leading과 trailing · delay — 고정된 시계로 스트림 전체를 밀기