
Async – Await
En Dart, las palabras clave async
y await
se utilizan en conjunto para facilitar y simplificar la escritura y lectura de código asíncrono. Permiten manejar operaciones asíncronas de manera más secuencial y parecida a la programación síncrona, evitando anidaciones excesivas de then()
y mejorando la legibilidad del código.
La palabra clave async
se coloca antes de la definición de una función para indicar que esa función puede contener operaciones asíncronas y que se puede utilizar el await
dentro de ella.
La palabra clave await
se coloca antes de una llamada a una función que devuelve un Future
. El await
pausa la ejecución del código actual hasta que el Future
se complete y se obtenga el resultado. Mientras espera, la ejecución se pasa al hilo de ejecución principal y puede continuar con otras tareas.
Future<String> obtenerInformacion() {
return Future.delayed(Duration(seconds: 2), () => 'Información obtenida');
}
Future<void> procesoAsincrono() async {
print('Inicio');
try {
String resultado = await obtenerInformacion();
print(resultado); // Imprime "Información obtenida" después de 2 segundos
} catch (error) {
print('Error: $error');
}
print('Fin');
}
void main() {
procesoAsincrono();
}
En este ejemplo, la función obtenerInformacion()
es similar al ejemplo anterior y devuelve un Future
con una demora de 2 segundos.
La función procesoAsincrono()
está marcada como async
para indicar que contiene operaciones asíncronas. Dentro de esta función, utilizamos la palabra clave await
antes de la llamada a obtenerInformacion()
para esperar a que el Future
se complete y obtener el resultado.
Además, se utiliza un bloque try-catch
para manejar cualquier error que pueda ocurrir durante la ejecución del Future
.
En la función main()
, se llama a procesoAsincrono()
, y el programa ejecutará el código de manera secuencial. Imprimirá «Inicio», esperará durante 2 segundos para obtener el resultado, imprimirá el resultado obtenido y finalmente imprimirá «Fin».
Utilizar async
y await
simplifica la escritura de código asíncrono al evitar anidaciones excesivas de then()
y permite que el código se lea de manera más secuencial, similar a la programación síncrona. Esto mejora la legibilidad y facilita el manejo de operaciones asíncronas en Dart.
Ejercicio de la Sesión
void main() async{
print('Inicio del programa');
try{
final value = await httpGet('https:://jenner.pe');
print(value);
} catch (err) {
print('Tenemos un error: $err');
}
print('Fin del programa');
}
Future<String> httpGet( String url) async {
await Future.delayed( Duration(seconds: 1));
throw 'Error en la petición';
// return 'Tenemos un valor de la petición';
}