¿Qué es una Promesa?

Una promesa representa el resultado eventual (en un futuro incierto) de una operación asincrónica, como, por ejemplo: un registro de una db, una página que pedimos por http, un objeto JSON que es respuesta de un request a un API. Es decir, que representa un placeholder (un lugar reservado) donde vamos a guardar la respuesta del método asincrónico (o un posible error en caso que no sea exitosa).
Como nos podemos imaginar, una promesa puede ser exitosa o no, y una misma promesa no se puede ejecutar dos veces, una vez que termina se convierte en inmutable (no puede cambiar). Además, si a una promesa le agregamos un callback (lo podemos agregar en cualquier momento), este será ejecutará cuando esta termine. Esto es genial, porque ya no nos interesa en qué momento se producen las cosas, si no en reaccionar al resultado de esas cosas.

 

Terminología de promises:

Una promesa puede estar:
• Pendiente (pending): El estado inicial de un promise.
• Completada (fullfilled): Representa que se completó de manera exitosa.
• Rechazada (rejected): La operación terminó, pero de manera fallida.
• Terminada (settled): La operación terminó, de cualquiera de las dos maneras anteriores.

 

Promises en JavaScript

Antes de ES6 (EcmaScript 6) javascript no soportaba nativamente las Promises, pero como el concepto ya estaba dando vuelta en la cabeza de algunos desarrolladores aparecieron varias librerías que lo implementaban.
Si bien el concepto es el mismo, y de hecho se creó un standard para las promises, no todas las implementaciones son iguales ni respetan el standard. Ustedes se preguntarán porque no usamos directamente las promises que definieron los científicos de EcmaScript, pero resulta que hay un serio debate online por las perfomances de las mismas en términos de tiempo y memoria, la gente de Bluebird hizo algunos benchmarks, y si los examinamos vemos que las promesas nativas de ES6 están todavía muy abajo en la lista.

Ir a la barra de herramientas