Volver al blog

Promises en JavaScript: Conquistando la Asincronicidad 🚀

La asincronicidad es uno de los conceptos más importantes en JavaScript, principalmente al lidiar con operaciones como solicitudes de red, lectura de archivos o cualquier otra operación que pueda tardar algún tiempo en completarse. Una de las herramientas más poderosas para lidiar con la asincronicidad en JavaScript son las Promises. En este artículo, vamos a explorar ese concepto a fondo.

Una Promise en JavaScript es un objeto que representa una operación que aún no ha sido completada, pero es esperada en el futuro. Una promesa es básicamente un contenedor para un valor que puede no estar disponible todavía, pero lo estará en algún punto en el futuro, o tal vez nunca.

Para crear una nueva promesa, usamos el constructor Promise, que recibe una función de ejecutor como parámetro. La función de ejecutor es llamada inmediatamente por el constructor Promise y recibe dos funciones como parámetros: resolve y reject. La función resolve es llamada cuando la operación asíncrona es completada con éxito, mientras que la función reject es llamada si hay un error.

Veamos un ejemplo:

const promise = new Promise((resolve, reject) => {
  const operation = Math.random() > 0.5;

  setTimeout(() => {
    if (operation) {
      resolve('¡Operación completada con éxito!');
    } else {
      reject(new Error('Hubo un error en la operación.'));
    }
  }, 1000);
});

promise
  .then(result => {
    console.log(result);
  })
  .catch(error => {
    console.error(error);
  });

En este ejemplo, creamos una nueva promesa que resuelve o rechaza después de un segundo, dependiendo del resultado de una operación aleatoria. Si la operación es exitosa, llamamos la función resolve con un mensaje de éxito. Si la operación falla, llamamos la función reject con un objeto Error. Usamos el método then para lidiar con el éxito y el método catch para lidiar con el error.

Es importante notar que una promesa puede estar en uno de tres estados: pendiente, resuelta o rechazada. Una promesa es inicialmente pendiente, después puede ser resuelta con un valor o rechazada con una razón (generalmente un error). Una vez que una promesa es resuelta o rechazada, su estado no puede ser alterado.

Las promesas también tienen un método finally que es llamado independientemente de si la promesa es resuelta o rechazada. Este método es generalmente usado para limpieza u operaciones de finalización.

A partir de ES2017, JavaScript también ofrece las palabras clave async y await para trabajar con promesas de una manera más legible y menos propensa a errores. Una función marcada con la palabra clave async siempre retorna una promesa, y la palabra clave await solo puede ser usada dentro de una función async. await pausa la ejecución de la función hasta que la promesa sea resuelta o rechazada.

Aquí está un ejemplo usando async y await:

const getOperationResult = () => {
  return new Promise((resolve, reject) => {
    const operation = Math.random() > 0.5;

    setTimeout(() => {
      if (operation) {
        resolve('¡Operación completada con éxito!');
      } else {
        reject(new Error('Hubo un error en la operación.'));
      }
    }, 1000);
  });
};

const processOperation = async () => {
  try {
    const result = await getOperationResult();
    console.log(result);
  } catch (error) {
    console.error(error);
  }
};

processOperation();

En este ejemplo, tenemos una función getOperationResult que retorna una promesa. Luego, tenemos una función async llamada processOperation que espera el resultado de la promesa usando await y entonces lidia con el resultado o error.

Las Promises, junto con async y await, son herramientas increíblemente útiles para lidiar con la asincronicidad en JavaScript. Permiten escribir código asíncrono de forma casi idéntica al código síncrono, haciendo el código más fácil de leer y entender.

Ahora, si estás buscando profundizar tus conocimientos en JavaScript, no dejes de consultar el artículo: Map: Cómo la Programación Funcional puede Transformar tus Datos en JavaScript.

¡Vamos a por ello! 🦅

Comentarios (0)

Este artículo aún no tiene comentarios 😢. ¡Sé el primero! 🚀🦅

Añadir comentarios