Objeto que representa la eventual resolución o rechazo de una operación asíncrona.
Permite manejar resultados futuros de manera más ordenada que los callbacks. Tiene estados: pending, fulfilled, rejected.
// Crear una Promise const miPromesa = new Promise((resolve, reject) => { setTimeout(() => { const exito = Math.random() > 0.5; if (exito) { resolve('¡Éxito!'); } else { reject(new Error('Falló')); } }, 1000); }); // Consumir con .then/.catch miPromesa .then(resultado => console.log(resultado)) .catch(error => console.error(error)) .finally(() => console.log('Terminó')); // Consumir con async/await async function ejecutar() { try { const resultado = await miPromesa; console.log(resultado); } catch (error) { console.error(error); } } // Promise.all - esperar todas const [usuarios, productos] = await Promise.all([ fetch('/api/usuarios').then(r => r.json()), fetch('/api/productos').then(r => r.json()) ]); // Promise.race - la primera que termine const resultado = await Promise.race([promesa1, promesa2]); // Promise.allSettled - todas, sin importar si fallan const resultados = await Promise.allSettled([p1, p2, p3]);