¿Qué superficie?
Cuatro superficies, un solo import. Elige la superficie que es el trabajo, y quédate en ella.
Lección
FxDart no son cuatro bibliotecas dentro de un gabán. Es un solo paquete porque un programa real cruza estos trabajos, y los nombres se mantienen cuando lo haces. El error es empezar por una lista de funciones. Empieza por el trabajo:
| El trabajo es… | Empieza con | No |
|---|---|---|
| Datos ya en mano; solo hace falta una parte | fx(iterable) |
envolver un map/where/take de una línea |
| I/O sobre una colección conocida, como mucho n en vuelo, orden conservado | .toAsync().map(f).concurrent(n) o .mapConcurrent(n, f) |
Future.wait(xs.map(f)) |
| Los valores llegan cuando llegan (pulsaciones, tics, sockets) | fxEvents(stream) |
un pipeline pull con sleep |
| El llamador maneja el fallo | either / mapEither / attempt en la superficie en la que ya estás |
throw para errores de dominio; null con la razón perdida |
Los nombres pull ganan en caso de colisión. takeUntil es el predicado de FxTS;
el análogo de la capa de eventos es stopOn.
Una palabra, un significado. Cruza en una costura con nombre:
.toAsync() eleva datos a demanda,
.pull() eleva eventos a demanda,
.toStream() va al otro lado.
attempt después de
retryOn /
retryOnError, nunca antes. Esos operadores vigilan el
canal de error; una vez que un fallo es un Left no queda nada
ahí que reintentar.
Dos trabajos que cruzan superficies se tratan como tutoriales propios:
búsqueda con debounce (tiempo → gana la consulta
más reciente → parseo tipado) y
fetch concurrente acotado (un límite, orden
conservado, cada fallo conservado). La rampa de acceso pull sigue empezando en
fx.
Demo · cuatro trabajos, cuatro superficies
El mismo import. Cada bloque es el programa más pequeño que pertenece a esa fila de la tabla:
fx — la cadena pull ·
concurrent — el límite de I/O ·
fxEvents — la cadena push ·
errores tipados — fallos como valores ·
búsqueda con debounce ·
fetch concurrente acotado