sampleOn
Emite el valor más reciente de la fuente cada vez que dispara el stream disparador — la fuente pone los valores, el disparador pone el ritmo.
Lección
Un sensor se actualiza doscientas veces por segundo; la pantalla se
repinta sesenta. Procesar cada actualización es trabajo desperdiciado —
lo que el consumidor quiere de verdad es el valor más reciente, a su
propio ritmo. sampleOn(trigger) es exactamente esa
separación: el stream fuente aporta los valores, el stream disparador
aporta los momentos, y cada evento del disparador emite el último valor
de la fuente.
Dos detalles lo mantienen honesto. Un disparador que dispara cuando no ha llegado nada nuevo se queda en silencio — nunca ves el mismo valor dos veces seguidas solo porque el reloj hizo tic. Y los valores superados entre disparos se descartan, no se encolan: es un operador con pérdidas por diseño, para streams de tipo estado donde solo importa la lectura más reciente.
La vida útil sigue a la fuente: cuando la fuente se cierra, la cadena
se cierra y la suscripción al disparador se cancela — un tic infinito
de Stream.periodic es un disparador perfectamente válido.
Compara con los vecinos: throttle
limita la tasa con una ventana fija medida desde los propios eventos de
la fuente; sampleOn le entrega el calendario por completo a
un segundo stream. Capa de eventos de fxdart, según el
sample de Rx.
Demo 1 · El disparador pone el ritmo
Demo 2 · Silencio cuando no hay nada nuevo, se cierra con la fuente
Pruébalo tú
Ejercicio: una posición de arrastre por frame.
throttle — limitación de tasa desde el propio timing de la fuente ·
debounce — esperar la calma en lugar de muestrear ·
withLatestFrom — la misma idea de «valor más reciente», pero combinando dos streams de datos