resolveProps
Espera todos los valores de un Map y devuelve el Map ya resuelto — el análogo con forma de mapa de Future.wait.
Lección
resolveProps resuelve un tipo de problema concreto y muy
habitual: tienes un Map cuyos valores son una mezcla de
valores normales y Futures —por ejemplo, varias llamadas a API
independientes indexadas por nombre de campo— y quieres recibir un único
Future con el mapa entero ya resuelto.
Internamente recorre las entradas y hace await sobre cada
valor uno tras otro, lo que parece que debería ser secuencial. En la
práctica, normalmente no es más lento que lanzarlos todos «a la vez»: en
Dart, un Future empieza a ejecutarse en el momento en que se
crea, no cuando se espera. Así que si construyes el mapa con
delay(...) o con peticiones que ya están en vuelo como valores
—la forma habitual de llamar a esta función—, todas ellas ya se están
ejecutando cuando resolveProps recibe el mapa; su bucle
secuencial de await se limita a leer resultados que en su
mayoría ya están listos, no a decidir cuándo empieza el trabajo. La demo de
abajo lo demuestra con un cronómetro.
Demo 1 · Fundamentos
Demo 2 · Los futures ya se solapan
Tres esperas de 100 ms, pero el conjunto termina muy por debajo de 300 ms, porque todas arrancaron a la vez:
Pruébalo tú
Ejercicio: usa resolveProps para esperar todos los valores de requests.
evolve — el primo síncrono, que transforma en lugar de esperar ·
concurrent — la versión con forma de iterable de «ejecutar cosas a la vez» ·
delay & sleep — se usan para construir los futures de la demo ·
fromEntries — construye un Map desde cero