combine & CombineSpec
Un solo combinador para «quién dispara» y «quién debe haber hablado» — más zipAll y withLatestFromAll.
Lección
combineLatest,
withLatestFrom y
zip difieren en quién puede
disparar una emisión y en si todo lado debe haber hablado.
combine es la forma unificada: una lista de
CombineSpec, cada uno un source más dos
flags. Es una función de nivel superior, no
FxEvents.combine — Dart no puede añadir estáticos a
FxEvents desde otro archivo.
causesEmit: true (el valor por defecto) significa que un
evento de esta fuente puede producir una salida, una vez que todo
spec requireFirst tiene un valor. Specs todos-true son
FxEvents.combineLatestAll.
causesEmit: false significa que esta fuente es solo
contexto: actualiza el slot pero nunca dispara una emisión por sí
sola — eso es withLatestFrom.
requireFirst: true (el valor por defecto) retiene toda
emisión hasta que esta fuente ha producido al menos un valor;
false deja que el slot sea null hasta que
hable. El resultado se cierra cuando todas las fuentes se han
cerrado.
Junto a él viven dos combinadores más.
zipAll sobre
FxEvents<Stream<T>> recoge cada stream
interior hasta que el exterior completa, y luego los empareja por
índice — los interiores ni siquiera se suscriben hasta entonces.
withLatestFromAll es el withLatestFrom
N-ario: en cada evento de la fuente, lo combina con el más reciente
de todos los demás, descartando los eventos de la fuente que llegan
antes de que todos los demás hayan hablado. Capa de eventos de
fxdart, según el combineLatest /
withLatestFrom / zipAll de Rx.
Demo 1 · Ambos lados disparan
Demo 2 · Solo contexto — causesEmit: false
Pruébalo tú
Ejercicio: zipAll sobre un stream de streams, y withLatestFromAll sobre una fuente.
combineLatest — ambos lados disparan, el CombineSpec todos-true ·
withLatestFrom — unilateral, el spec causesEmit: false ·
waitAll — zip, combineLatestAll, concat