Contenido del curso

¿Qué se implementó en ES6?

Promesas en JavaScript con resolve y reject

Resumen

Las promesas en JavaScript son una de las incorporaciones más relevantes de ECMAScript 6 para manejar asincronismo de forma clara y predecible. Si vienes del mundo de los callbacks y quieres escribir código que no se bloquee mientras espera resultados, esta es la pieza que necesitas dominar.

¿Qué es una promesa en JavaScript y para qué sirve?

Una promesa representa algo que va a pasar: hoy, mañana o nunca. Esa analogía resume el comportamiento real de la sintaxis y te ayuda a entender por qué este patrón cambió la manera de escribir código asíncrono.

Antes de ES6, el asincronismo en JavaScript se resolvía principalmente con callbacks, funciones que reciben otra función como parámetro y la ejecutan cuando corresponde. El problema es que anidar callbacks vuelve el código difícil de leer y mantener. Las promesas llegaron a ordenar ese caos antes de que async y await aparecieran más adelante.

¿Qué es una promesa en JavaScript? Es un objeto que representa el resultado futuro de una operación asíncrona. Puede resolverse con éxito (resolve) o fallar (reject).

¿Cómo se crea una promesa con resolve y reject?

La sintaxis introducida en ECMAScript 6 usa el constructor new Promise y recibe dos parámetros: resolve para cuando todo sale bien y reject para cuando algo falla.

Para verlo en acción, creamos un archivo 06-promise.js y definimos una arrow function que retorna la promesa:

javascript const anotherFunction = () => { return new Promise((resolve, reject) => { if (true) { resolve('¡Hey!'); } else { reject('Ups, no funcionó'); } }); };

Aquí ocurren varias cosas importantes:

  • La arrow function externa requiere return explícito porque usamos llaves para abrir un bloque de lógica.
  • El constructor new Promise recibe una función anónima que también puede escribirse como arrow function.
  • Dentro del bloque defines la condición que decide si la promesa se cumple o se rechaza.

El valor que pases a resolve o reject puede ser un string, un número, un objeto o cualquier dato que necesites propagar al consumidor de la promesa.

¿Cómo consumir promesas con then y catch?

Una vez creada la promesa, la consumes encadenando los métodos then y catch. El primero captura el resultado exitoso y el segundo atrapa los errores.

javascript anotherFunction() .then(response => console.log(response)) .catch(error => console.log(error));

Cuando la condición evalúa a true, la consola imprime ¡Hey!. Si cambias la condición a false, el flujo entra al reject y catch muestra Ups, no funcionó.

¿Para qué sirve catch en una promesa? Captura cualquier error o rechazo de la promesa para que puedas manejarlo sin romper la ejecución del programa.

¿Puedo encadenar varios then en la misma promesa?

Sí, y es uno de los puntos fuertes de este patrón. Puedes tener múltiples then consecutivos donde cada uno transforma o reacciona al valor anterior, y un único catch al final que recoja cualquier error de la cadena.

Un detalle de sintaxis que conviene cuidar: no cierres con punto y coma antes de catch ni entre los then, porque rompes la concatenación. La cadena debe fluir sin interrupciones hasta el último método.

¿Por qué importan las promesas dentro de ECMAScript 6?

Las promesas resolvieron una limitación real del lenguaje: trabajar con asincronismo sin caer en el llamado callback hell. Con esta sintaxis tu aplicación puede hacer múltiples llamadas, esperar recursos y seguir respondiendo sin bloquearse.

Algunos puntos clave para fijar el concepto:

  • Una promesa siempre termina en uno de dos estados: resuelta o rechazada.
  • resolve y reject son funciones que tú decides cuándo invocar dentro de tu lógica.
  • then recibe el valor de resolve; catch recibe el valor de reject.
  • Puedes encadenar tantos then como necesites antes del catch.

Esta base es justamente la que más adelante hará que entender async y await sea mucho más sencillo, porque esa sintaxis no es más que azúcar sintáctico sobre las promesas que acabas de escribir.

¿Ya probaste cambiar el valor del if entre true y false para ver cómo cambia la salida en consola? Cuéntame en los comentarios qué otros casos de uso se te ocurren para aplicar promesas en tus proyectos.