resolveProps

Espera todos los valores de un Map y devuelve el Map ya resuelto — el análogo con forma de mapa de Future.wait.

Future<Map<K, V>> resolveProps<K, V>(Map<K, FutureOr<V>> map)

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.

Relacionado: 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