Programación Asíncrona

Giancarlo Corzo
Laboratoria Developers
3 min readMay 26, 2017

La programación asíncrona nos da la capacidad de “diferir” la ejecución de una función a la espera de que se complete una operación, normalmente de I/O (red, disco duro, …), y así evitar bloquear la ejecución hasta que se haya completado la tarea en cuestión. Esto es posible gracias a que las funciones son ciudadanos de primer nivel (first-class citizens) y pueden ser pasadas como argumentos de otras funciones tal cual lo haríamos con las variables.

Síncrono vs Asíncrono

Antes de poder hablar de programación asícrona debemos entender la diferencia entre ejecución síncrona y asícrona. Un código síncrono es aquel código donde cada instrucción espera a la anterior para ejecutarse mientras que un código asíncrono no espera a las instrucciones diferidas y continúa con su ejecución. Por lo general la asincronía permite tener una mejor respuesta en las aplicaciones y reduce el tiempo de espera del cliente.

Veamos un ejemplo:

Síncrono

Cada instrucción se ejecutará en secuencia hasta terminar.

Código síncrono

Asíncrono

En el caso asícrono, algunas de las instrucciones se ejecutarán a destiempo.

Si ejecutamos este ejemplo veremos imprimirse ‘Primero’, ‘Tercero’, ‘Segundo’. Esto porque estamos usando la instrucción setTimeout() que difiere la ejecución x milisegundos.

Callbacks

Una función callback es una función de primer nivel que se pasa a otra función como variable y ésta es ejecutada en algún punto de la ejecución de la función que la recibe.

Callbacks

Veamos un ejemplo algo más complicado

Usando funciones anónimas en Mapas

Pues hasta ahí los callbacks parecen cool e inofensivos pero cuando abusamos de ellos se genera algo llamado el Callback hell

Callback Hell

Usar correctamente los callbacks a veces puede ser poco intuitivo y puede derivar en situaciones como las siguientes:

Tomado de CallbackHell.com

Esto pasa cuando no se tiene buenas prácticas, pero ejemplos como estos se pueden mejorar rápidamente usando técnicas de modularización y manejo de errores. Pueden ver más sobre esto en callbackhell.com

Promesas (Promises)

¿Promise?

El objeto promesa es un proxy para un valor que no necesariamente se conoce al momento de creada la promesa. Permite asociar callbacks que se ejecutarán dependiendo del éxito o fracaso de la acción prometida. Las promesas pueden tener 3 estados definidos:

  • pendiente (pending): estado inicial, no cumplida o rechazada.
  • cumplida (fulfilled): significa que la operación se completó satisfactoriamente.
  • rechazada (rejected): significa que la operación falló.

Cuando creamos una promesa ésta recibe como parámetro una función con dos parámetros: el primero es una referencia a la función de éxito y el otro a una función de error.

Ahora que conocemos la estructura básica de una promesa hagamos algo más complejo y real.

get data usando promises

Conclusión

Los promises son una mejor forma de encapsular la lógica asíncrona logrando evitar tener que anidar callbacks y haciendo mucho más legible nuestro código y menos propenso a errores.

Referencias:

--

--