sampleOn
트리거 스트림이 발화할 때마다 소스의 최신 값을 내보냅니다 — 값은 소스가 정하고, 리듬은 트리거가 정합니다.
강의
센서는 초당 이백 번 갱신되는데, 디스플레이는 육십 번 다시 그립니다.
모든 갱신을 처리하는 것은 낭비입니다 — 소비자가 진짜 원하는 것은
자기 일정에 맞춘 최신 값입니다.
sampleOn(trigger)이 정확히 그 분리입니다: 소스 스트림이
값을 공급하고, 트리거 스트림이 순간을 공급하며, 트리거 이벤트마다
소스의 최신 값이 내보내집니다.
두 가지 디테일이 이 연산자를 정직하게 만듭니다. 새로 도착한 것이 없을 때 발화한 트리거는 침묵합니다 — 시계가 똑딱였다는 이유만으로 같은 값을 연달아 두 번 보는 일은 없습니다. 그리고 트리거 사이에 밀려난 값들은 큐에 쌓이지 않고 버려집니다: 이것은 설계상 손실이 있는 연산자로, 최신 판독값만 중요한 상태 성격의 스트림을 위한 것입니다.
수명은 소스를 따릅니다: 소스가 닫히면 체인이 닫히고 트리거 구독은
취소됩니다 — 끝없는 Stream.periodic 틱도 훌륭한 트리거가
됩니다. 이웃과 비교해 보세요:
throttle은 소스 자신의
이벤트에서 잰 고정 윈도우로 속도를 제한하고, sampleOn은
일정을 통째로 두 번째 스트림에 넘깁니다. fxdart 이벤트 계층이며,
Rx의 sample을 따랐습니다.
데모 1 · 리듬은 트리거가 정한다
데모 2 · 새것이 없으면 침묵, 소스와 함께 닫힘
직접 해 보기
연습: 프레임당 드래그 위치 하나.
throttle — 소스 자신의 타이밍으로 속도 제한 ·
debounce — 샘플링 대신 잠잠해지기를 기다림 ·
withLatestFrom — 같은 "최신 값" 아이디어지만 두 데이터 스트림을 결합