Volver a la página principal
jueves 31 octubre 2024
9

Cómo usar async y await en Dart

En Dart, las palabras clave async y await permiten escribir código asincrónico de manera más sencilla y legible. Estas palabras clave facilitan trabajar con operaciones asíncronas, como solicitudes de red o lectura de archivos, evitando el uso de múltiples then() anidados. Con async y await, puedes escribir código que se ejecuta de forma no bloqueante, manteniendo un flujo de código fácil de seguir.

¿Qué son async y await en Dart?

  • async: Indica que una función es asincrónica y devolverá un Future. Esto significa que el resultado no estará disponible de inmediato, ya que el proceso puede tardar en completarse.
  • await: Se usa dentro de una función async para pausar la ejecución hasta que el Future se complete, permitiendo que otras tareas continúen ejecutándose en paralelo.

Sintaxis básica de async y await

Para definir una función asincrónica en Dart, agrega async después de la declaración de la función. Luego, usa await antes de cualquier operación asíncrona para que Dart espere a que esa operación termine antes de continuar.

Future<void> obtenerDatos() async {
  var datos = await fetchData();
  print(datos);
}

En este ejemplo, fetchData() es una operación asíncrona que podría tardar en completarse. La ejecución de obtenerDatos esperará hasta que fetchData() finalice, y luego imprimirá el resultado.

Ejemplos de uso de async y await en Dart

Llamada asincrónica a una API

Future<String> obtenerClima() async {
  final respuesta = await http.get(Uri.parse('https://api.clima.com/hoy'));
  if (respuesta.statusCode == 200) {
    return respuesta.body;
  } else {
    throw Exception('Error al cargar datos');
  }
}

void main() async {
  try {
    String clima = await obtenerClima();
    print('El clima es: $clima');
  } catch (e) {
    print(e);
  }
}

Ejemplo de pausa con Future.delayed

Puedes simular una demora en la ejecución utilizando Future.delayed:

Future<void> procesarDatos() async {
  print('Procesando...');
  await Future.delayed(Duration(seconds: 2)); // Pausa de 2 segundos
  print('Datos procesados');
}

void main() async {
  await procesarDatos();
}

Manejo de errores

El uso de try-catch ayuda a capturar errores en funciones asíncronas:

Future<void> cargarArchivo() async {
  try {
    var contenido = await File('ruta/del/archivo.txt').readAsString();
    print(contenido);
  } catch (e) {
    print('Error al leer el archivo: $e');
  }
}

Referencia oficial

Para más detalles, puedes visitar la documentación oficial de async y await en Dart.

Etiquetas:
dart
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer