pipe1

Aplica una función a un valor, esperándolo antes si el valor es un Future.

FutureOr<R> pipe1<A, R>(FutureOr<A> a, FutureOr<R> Function(A a) f)

Lección

pipe1 es el bloque de construcción de un solo paso que pipe usa internamente: aplica f a a, pero si a es un Future, lo espera primero. Si a es un valor normal, f se ejecuta al momento y pipe1 devuelve lo que devuelva f — de forma síncrona, sin ninguna envoltura Future.

La gracia es que f nunca tiene que saber ni preocuparse de si el valor que recibe viene de trabajo síncrono o asíncrono aguas arriba: pipe1 lo normaliza por ti. Resulta muy cómodo cuando estás componiendo un valor que a veces es un Future (por ejemplo, el resultado de un paso asíncrono anterior) y quieres que el siguiente paso se escriba igual en ambos casos.

Como solo maneja un paso, puedes anidar llamadas a pipe1 para componer una cadena corta, o recurrir al pipe completo (una List<Function>) cuando hay más de uno o dos pasos.

Demo 1 · Un valor normal (sin Future)

Sin ningún Future de por medio, pipe1 simplemente llama a f(a) directamente y devuelve un valor normal:

Demo 2 · Esperar antes a un Future

Cuando a es un Future, pipe1 lo espera antes de llamar a f — encadena unos cuantos para componer pasos asíncronos de uno en uno:

Pruébalo tú

Ejercicio: usa pipe1 para convertir un nombre diferido en un saludo.

Relacionado: pipe — pipeline de varios pasos construido sobre pipe1 · fx — la alternativa tipada en forma de cadena · delay & sleep — las utilidades asíncronas usadas arriba