forEach
Ejecuta una función una vez por elemento, únicamente por sus efectos secundarios.
Lección
forEach es el nombre idiomático en Dart; fxdart también
acepta la grafía each de FxTS: son el mismo operador. Es un
operador terminal, igual que toList: al llamarlo tira de
todos los valores a través de la cadena entera. La diferencia está en qué
hace con esos valores: en lugar de recogerlos en una List,
se limita a ejecutar f con cada uno y devuelve
void. Úsalo cuando estés imprimiendo, registrando logs,
escribiendo en una base de datos o produciendo cualquier otro efecto, y
no necesites los valores de vuelta.
En una cadena síncrona, .forEach(f) es el propio
Iterable.forEach de Dart, heredado por Fx; la
cadena asíncrona y la forma data-first forEach(f, iterable)
las aporta fxdart, para que el operador se lea igual en todas partes.
forEachAsync (o .forEach() sobre una cadena
FxAsync) espera con await a f para cada
elemento, estrictamente en el orden en que llegan; aunque algunas
llamadas individuales pudieran terminar antes que otras,
forEach siempre procesa una a una y en secuencia. Si quieres
solapamiento, añade .concurrent(n) antes de
.forEach() en la cadena.
Demo 1 · Fundamentos
Demo 2 · Asíncrono, estrictamente en orden
Aunque cada elemento duerme durante un tiempo distinto,
forEachAsync los sigue procesando 1, 2, 3 — nunca fuera de
orden:
Pruébalo tú
Ejercicio: usa forEach para imprimir una línea de recibo por
cada pedido y llevar un total acumulado.