Los enfoques async y await en Dart son muy similares a otros lenguajes, lo que hace que sea un tema cómodo de entender para aquellos que han usado este patrón antes. Sin embargo, incluso si no tiene experiencia con la programación asíncrona usando async/await, debería encontrarlo fácil de seguir aquí.
Funciones asíncronas:
Las funciones forman la base de la programación asíncrona. Estas funciones asíncronas tienen modificadores asíncronos en su cuerpo. Aquí hay un ejemplo de una función asíncrona general a continuación:
Cuando se llama a una función asíncrona, se devuelve inmediatamente un futuro y el cuerpo de la función se ejecuta más tarde. A medida que se ejecuta el cuerpo de la función asíncrona, el futuro devuelto por la llamada a la función se completará junto con su resultado. En el ejemplo anterior, llamar a demo() da como resultado el futuro.
Cualquier función que desee ejecutar de forma asíncrona debe tener el modificador asíncrono agregado. Este modificador viene justo después de la firma de la función, así:
Dart
void hello() async { print('something exciting is going to happen here...'); }
Por lo general, la función que desea ejecutar de forma asincrónica tendría alguna operación costosa como E/S de archivo (una llamada API a un servicio RESTful).
Expresiones en espera:
Las expresiones de espera te hacen escribir el código asincrónico casi como si fuera sincrónico. En general, una expresión de espera tiene la forma que se indica a continuación:
Dart
void main() async { await hello(); print('all done'); }
Por lo general, es un cálculo asincrónico y se espera que evalúe a un futuro. Las expresiones de espera evalúan la función principal y luego suspenden la función que se está ejecutando actualmente hasta que el resultado esté listo, es decir, hasta que el futuro se haya completado. El resultado de la expresión de espera es la finalización del Futuro.
- Hay dos cosas importantes que comprender con respecto al bloque de código anterior. En primer lugar, usamos el modificador asíncrono en el método principal porque vamos a ejecutar la función hello() de forma asíncrona.
- En segundo lugar, colocamos el modificador await directamente frente a nuestra función asíncrona. Por lo tanto, esto se conoce con frecuencia como el patrón async/await.
- Solo recuerde, si va a usar await, asegúrese de que tanto la función de llamada como cualquier función a la que llame dentro de esa función usen el modificador asíncrono .
Futuros:
Dart es un lenguaje de programación de un solo subproceso. El objeto Future<T> representa el resultado de una operación asíncrona que produce un resultado de tipo T. Si el resultado no es un valor utilizable, entonces el tipo de futuro es Future<void>. Un futuro representa un valor único, ya sea un dato o un error de forma asincrónica.
Hay 2 formas de manejar los futuros:
- Uso de la API del futuro
- Uso de la operación async y await.
Ahora, escribamos un programa y veamos el resultado.
Ejemplo:
Dart
Future delayedPrint(int seconds, String msg) { final duration = Duration(seconds: seconds); return Future.delayed(duration).then((value) => msg); } main() async { print('Life'); await delayedPrint(2, "Is").then((status){ print(status); }); print('Good'); }
Producción-
Life Is Good
En este caso, usamos las palabras clave async y await. Await básicamente mantiene el flujo de control, hasta que se completa la operación. Para usar await dentro de una función, debemos marcar la función con la palabra clave asíncrona. Lo que significa que esta función es una función asíncrona.
Combinado con la clase Futures, el patrón async/await en Dart es una forma poderosa y expresiva de hacer programación asíncrona.
Publicación traducida automáticamente
Artículo escrito por garv_wadhwa y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA