peek
Ejecuta una función por cada elemento sin cambiar nada: el equivalente en un pipeline a un breakpoint del depurador.
Lección
peek es el primo estricto de mapEffect:
mientras que mapEffect aún puede cambiar el valor (es
map con otro nombre), el callback de peek
devuelve void — solo tiene permiso para mirar. El elemento
que entra sale intacto. Recurre a él para colar un print,
una métrica o una línea de log en mitad de un pipeline mientras depuras,
sin arriesgarte a que una errata mute los datos en silencio.
Es tan perezoso como todo lo demás por aquí: el callback se dispara exactamente una vez por cada elemento que llega a pasar por él, en orden, y ni un momento antes.
peekAsync está construido directamente sobre
mapAsync (espera a f y luego vuelve a emitir el
valor original), así que comparte exactamente el comportamiento de
concurrencia de map: .concurrent(n) ejecuta de
verdad n callbacks en paralelo, a diferencia de
flatMap o scan, cuyas máquinas de estado
internas tienen que seguir siendo secuenciales.
Demo 1 · Fundamentos
Los mismos valores entran y salen — peek solo
observa:
Demo 2 · Asíncrono, con concurrencia real
Pruébalo tú
Ejercicio: usa peek para imprimir
'checking price: $p' por cada precio sin cambiar los
valores, y luego súmalos con fold.
mapEffect — como peek, pero puede transformar ·
map — transformar cada elemento ·
pluck — extraer un campo de cada map ·
concurrent — evaluación en paralelo