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.
Future
. Esto significa que el resultado no estará disponible de inmediato, ya que el proceso puede tardar en completarse.
async
para pausar la ejecución hasta que el Future
se complete, permitiendo que otras tareas continúen ejecutándose en paralelo.
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.
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);
}
}
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();
}
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');
}
}
Para más detalles, puedes visitar la documentación oficial de async y await en Dart.
Jorge García
Fullstack developer