Referencia rápida

Chuleta de Promesas en JavaScript (Promises)

Una guia de referencia rapida para Promesas en JavaScript: constructor, encadenamiento, gestion de errores, combinadores y async/await.

· Publicado

Una Promise (Promesa) representa la eventual finalizacion (o fracaso) de una operacion asincrona y el valor resultante obtenido.

Estados de una Promesa

Una Promesa se encuentra siempre en uno de tres estados mutuamente excluyentes:

  1. pending (pendiente): Estado inicial, ni cumplida ni rechazada.
  2. fulfilled (cumplida): Operacion completada con exito (resolve(valor)).
  3. rejected (rechazada): Operacion fallida (reject(error)).

Constructor y Encadenamiento Básico

const loadUser = (id) => {
  return new Promise((resolve, reject) => {
    fetch(`/api/users/${id}`)
      .then((res) => {
        if (!res.ok) throw new Error(`HTTP ${res.status}`);
        return res.json();
      })
      .then((data) => resolve(data))
      .catch((err) => reject(err));
  });
};

loadUser(42)
  .then((user) => console.log('Cargado con exito:', user.name))
  .catch((err) => console.error('Error:', err.message))
  .finally(() => console.log('Peticion finalizada'));

Resolutores Estáticos

// Promesa resuelta de inmediato
const p1 = Promise.resolve('Immediate value');

// Promesa rechazada de inmediato
const p2 = Promise.reject(new Error('Immediate failure'));

Combinadores de Promesas

Método Comportamiento Falla Cuando
Promise.all([p1, p2]) Espera a que todas se cumplan con exito Cualquier promesa es rechazada (cortocircuito)
Promise.allSettled([p1, p2]) Espera a que todas finalicen (nunca se rechaza) Nunca falla ni se rechaza
Promise.race([p1, p2]) Adopta el resultado de la primera promesa en resolverse La primera promesa finalizada es rechazada
Promise.any([p1, p2]) Se cumple con la primera promesa exitosa Todas las promesas son rechazadas (AggregateError)
// Promise.all: Esperar varias peticiones independientes
const [users, posts] = await Promise.all([
  fetchUsers(),
  fetchPosts()
]);

// Promise.allSettled: Inspeccionar el estado de todas las peticiones
const results = await Promise.allSettled([reqA(), reqB()]);
results.forEach((res) => {
  if (res.status === 'fulfilled') console.log('Value:', res.value);
  else console.error('Reason:', res.reason);
});

Sintaxis Equivalente con Async / Await

async function getUserData(id) {
  try {
    const res = await fetch(`/api/users/${id}`);
    const data = await res.json();
    return data;
  } catch (err) {
    console.error('Failed to retrieve user:', err);
    throw err;
  }
}

Referencias

Temas relacionados