Saltar al contenido
Desde que comenzó su desarrollo en 1996, han ido creciendo exponencialmente las novedades incorporadas en el lenguaje estandarizado ECMAScript, y por consiguiente en su principal dialecto conocido como JavaScript.

Una de las características de mayor interés incorporada a JavaScript ha sido la implementación de la programación asíncrona con ASYNC/AWAIT propuesta en la versión ES7.

La asincronía juega un papel esencial en actividades que pueden llegar a ser potencialmente bloqueantes (como por ejemplo una petición AJAX, la lectura/escritura de ficheros o acceso a base de datos que en ocasiones pueden ser actividades lentas o con retrasos). Si este bloqueo ocurre dentro de un proceso síncrono, la aplicación completa se paraliza, pudiendo creer el usuario que ha dejado de funcionar. Sin embargo, en un proceso asíncrono dicha aplicación puede continuar con otra ejecución independiente del recurso web hasta que la tarea bloqueante finalice.

Inicialmente, el código asíncrono en JavaScript se desarrollaba mediante el uso de funciones “callback”, que consisten en un procedimiento bastante tedioso y complejo de entender si además estás acostumbrados a una programación orientada a objetos o a que las variables y funciones sean previamente declaradas.

Posteriormente, se introdujeron las promesas, las cuales permiten esperar a que múltiples operaciones asíncronas terminen de ejecutarse de manera concurrente o secuencial mejorando la legibilidad del código, aunque se convierte más complejo conforme aumenta el número de promesas.

Recientemente han aparecido las funciones ASYNC/AWAIT, que mejoran más aún la programación asíncrona, facilitando el manejo de errores y consiguiendo que el código asíncrono se comporte como si fuera síncrono. Su funcionamiento es bastante sencillo: ASYNC se emplea para declarar las funciones asíncronas, y dentro de estas funciones se empleará AWAIT para suspender la ejecución hasta que la expresión que le sigue devuelva un valor. Además, AWAIT no necesita una promesa, sino que espera un objeto “thenable” (con un método then).

El único inconveniente es que de momento se necesita transpilar el código para que pueda ser legible para los navegadores, ya que no todos incluyen esta funcionalidad por el momento. De modo que si estás trabajando en un proyecto donde ya se utiliza algún transpilador para utilizar ES6 o alguna otra versión experimental de ES7, emplear ASYNC/AWAIT no supondría un problema y usarlo sería realmente recomendable. Sin embargo, en un futuro muy próximo podrá usarse fácilmente ya que todos los navegadores lo tendrán incorporado en su funcionalidad.

En conclusión, por medio de funciones asíncronas con ASYNC/AWAIT podremos evitar realizar llamadas a callbacks anidados y el uso de interminables cadenas de promesas, usando un código mucho más elegante y comprensible. En la siguiente imagen se visualiza la evolución en la programación asíncrona:





Si deseáis profundizar más sobre este tema, os recomiendo asistir a cualquier conferencia impartida por Pablo Almunia, un gran experto en programación asíncrona, como pude comprobar durante su charla “Por fin: ASYNC/AWAIT” impartida en el evento JSDay 2017.

 
Virginia  Martos
Virginia Martos

Web Developer en BABEL.

logo linkedin compartir en Linkedin Contacto

Otros artículos destacados