Introducción


Te encontrarás con términos que se utilizan amenudo en el asincronismo:

En JavaScript casi todas las operaciones de entrada y salida no se bloquean. A esto se le conoce como asíncronismo. Lo único que no es procesado antes de que termine la operación son los callbacks, ya que éstos están amarrados a una operación y esperan a que sea finalizada para poder ejecutarse.

El asincronismo es una manera de aprovechar el tiempo y los recursos de la aplicación, ejecutando tareas y procesos mientras otros son resueltos en background (como la llegada de la información de una API), para posteriormente continuar con las tareas que requerían esa información que no tenías de manera instantánea.

Un ejemplo fácil de asincronismo vs sincronismo

Invitar a unos amigos a una fiesta y ofrecer una parrillada. Primero decides colocar la carne y verduras a la parrilla y luego repartir bebidas y algo para picar (snacks).

Si fuera una persona síncrona (Blocking) tendrías que esperar a que la comida de la parrilla esté cocinada y luego atender a los invitados. Pero si fuera una persona asíncrona (Non Blocking) luego de poner la carne al carbón, sacas las bebidas frías de la nevera y compartes con los invitados mientras se cocina la carne. La acción de que la comida en la parrillada esté lista sería un callback que está esperando que finalice el proceso para ejecutarse. Pero otros procesos (como compartir la velada con bebidas y algo de picar) ya podrían irse realizando.

Tipos de console

console.info("info"); // Para mensajes de información en la consola web
console.error("error"); // Para mostrar un mensaje de error
console.warn("warn"); // Para mostrar un mensaje de advertencia
console.log("log"); // Para mensajes generales de registro de información

Formas de manejar la asincronía en JavaScript


Callbacks

Una función que se pasa como argumento de otra función y que será invocada.

Promesas

(implementado en ES6) Una promesa es una función no-bloqueante y asíncrona la cual puede retornar un valor ahora, en el futuro o nunca.

Async/Await

(implementado en ES8) Permite estructurar una función asincrónica sin bloqueo de una manera similar a una función sincrónica ordinaria.