sampleOn

트리거 스트림이 발화할 때마다 소스의 최신 값을 내보냅니다 — 값은 소스가 정하고, 리듬은 트리거가 정합니다.

FxEvents<T> FxEvents<T>.sampleOn(Stream<void> trigger) // chain (events)

강의

센서는 초당 이백 번 갱신되는데, 디스플레이는 육십 번 다시 그립니다. 모든 갱신을 처리하는 것은 낭비입니다 — 소비자가 진짜 원하는 것은 자기 일정에 맞춘 최신 값입니다. sampleOn(trigger)이 정확히 그 분리입니다: 소스 스트림이 값을 공급하고, 트리거 스트림이 순간을 공급하며, 트리거 이벤트마다 소스의 최신 값이 내보내집니다.

두 가지 디테일이 이 연산자를 정직하게 만듭니다. 새로 도착한 것이 없을 때 발화한 트리거는 침묵합니다 — 시계가 똑딱였다는 이유만으로 같은 값을 연달아 두 번 보는 일은 없습니다. 그리고 트리거 사이에 밀려난 값들은 큐에 쌓이지 않고 버려집니다: 이것은 설계상 손실이 있는 연산자로, 최신 판독값만 중요한 상태 성격의 스트림을 위한 것입니다.

수명은 소스를 따릅니다: 소스가 닫히면 체인이 닫히고 트리거 구독은 취소됩니다 — 끝없는 Stream.periodic 틱도 훌륭한 트리거가 됩니다. 이웃과 비교해 보세요: throttle은 소스 자신의 이벤트에서 잰 고정 윈도우로 속도를 제한하고, sampleOn은 일정을 통째로 두 번째 스트림에 넘깁니다. fxdart 이벤트 계층이며, Rx의 sample을 따랐습니다.

데모 1 · 리듬은 트리거가 정한다

데모 2 · 새것이 없으면 침묵, 소스와 함께 닫힘

직접 해 보기

연습: 프레임당 드래그 위치 하나.

관련 항목: throttle — 소스 자신의 타이밍으로 속도 제한 · debounce — 샘플링 대신 잠잠해지기를 기다림 · withLatestFrom — 같은 "최신 값" 아이디어지만 두 데이터 스트림을 결합