DART – Future – Async – Await

Como crear un Future

Son un medio para obtener un valor en algún momento en el futuro.

La forma en la que funciona es la siguiente: una función que necesita hacer una acción muy costosa en el tiempo, pone en “ESPERA” dicha acción como un trabajo para hacer y devuelve un objeto Future inmediatamente, de esta forma se consigue no bloquear el hilo de ejecución de DART. Más adelante, cuando el trabajo ha terminado, y el valor está disponible, se dice que el Future se ha completado con dicho valor.

import 'dart:io';

main() {
  File file = new File("prueba.txt");
  Future future = file.readAsString();
  future.then((content) {
    print(content);
  });
  print('Fin del Programa');
}

Tenemos que tener claro que el print “Fin de Programa” se ejecutara primero ya que la lectura del archivo demorara en realizarse.  El THEN sera lo que se va a ejecutar al momento de tener el valor FUTURO, en este caso: el contenido del archivo TXT.

Gestión de errores Future

También es posible que el Future retorne un error, para ello tenemos una forma de controlarlo.

import 'dart:io';

main() {
  File file = new File("prueba.txt");
  Future future = file.readAsString();
  future.then((content) {
    print(content);
  })
  .catchError((e) => print(e.toString()));
  print('Fin del Programa');
}

Async/Await

Las palabras clave async y await le permite escribir código asincrónico que se parece al código síncrono. Por ejemplo, aquí hay un código que usa await para esperar el resultado de una función asincrónica:

await verificarVersion();

Para usar await, el código debe estar en una función asíncrona, una función marcada como async:

Future<String> version() async {
  String versionActual = await verificarVersion();
  return versionActual;
}

Recuerde, en este caso, el FUTURE resuelve un valor que luego puede usar. Aqui el ejemplo completo:

import 'dart:io';

main() async {
  print('La Version Es: ${await version()}');
}

Future<String> version() async {
  String versionActual = await verificarVersion();
    return versionActual;
  }
  
 String verificarVersion() {
   sleep(Duration(seconds: 3));
   return 'BETA 1';
}

1 thought on “DART – Future – Async – Await”

  1. Pingback: Dart - Variables y Tipos de datos - de String a Maps - FelinoHost

Leave a Comment

Your email address will not be published. Required fields are marked *