Jenner Acosta Diaz
Dart Website

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';
  
}