windowOn, windowCount & windowEvery
Streams vivos anidados: ve los valores de una ventana antes de que cierre, rota por cantidad, por un disparador o por un reloj.
Lección
chunk espera a que una ventana
cierre y entonces emite una List. La familia window*
emite la ventana mientras sigue abierta: cada
valor del stream externo es un
FxEvents anidado, así que un suscriptor puede ver eventos antes del
cierre — un gráfico en vivo del minuto actual, un total acumulado del
lote actual. Esa es toda la diferencia, y es por lo que el
tipo de retorno es FxEvents<FxEvents<T>>.
windowCount(size) rota cada size
eventos; un startEvery menor que size
solapa, uno mayor deja huecos. windowOn(boundaries) abre una
ventana de inmediato al escuchar y rota en cada valor disparador —
se ignora la finalización del límite, así que la ventana actual sigue abierta
hasta que la fuente completa. windowEvery(span) es la
forma reloj; every solapa o deja huecos en ese periodo, y
maxSize cierra una ventana antes por cantidad.
La vida útil sigue a RxJS 9: cancelar el externo completa los internos vivos
en silencio en vez de darles error, así que los suscriptores
anidados se desmontan limpiamente. Un error de la fuente sigue dando error a cada
interno vivo, y después al externo. Y como los internos son streams, puede
aparecer una ventana vacía al final cuando se abre una nueva al llenar
la anterior el último valor — chunk* se salta esas;
window* no.
chunkToggle(openings, closeOf) es la contraparte de la familia lista
de windowToggle: cada apertura arranca un
búfer, el primer evento de closeOf de esa apertura
lo emite, los búferes vacíos se saltan como
chunkOn. Capa de eventos de fxdart,
siguiendo a window, windowCount,
windowTime y bufferToggle de Rx.
Demo 1 · Ventanas de dos
Demo 2 · Rotar con un disparador
Pruébalo tú
Ejercicio: internos vivos que abarcan un Duration corto.
chunk / chunkOn — las mismas ventanas como listas, emitidas cuando cierran ·
windowed — listas deslizantes en la capa pull ·
groupsBy — internos vivos con clave por valor, no por tiempo