Antes de la introducción de async y await en JavaScript, el manejo de operaciones asíncronas con promesas se hacía principalmente usando los métodos .then() y .catch() de las promesas. Estos métodos permitían encadenar funciones que se ejecutaban cuando la promesa se resolvía o se rechazaba, respectivamente. Por ejemplo:
miPromesa()
.then(resultado => {
// manejar resultado exitoso
})
.catch(error => {
// manejar error
});
1. Promise.all
Espera a que todas las promesas se resuelvan. Si alguna promesa es rechazada, se rechaza inmediatamente con el motivo del primer error.
const p1 = Promise.resolve(3);
const p2 = 1337; // No es promesa, se acepta tal cual en el array de resultados
const p3 = new Promise((resolve) => setTimeout(resolve, 100, "foo"));
Promise.all([p1, p2, p3]).then(values => {
console.log(values); // [3, 1337, "foo"]
}).catch(error => {
console.error(error);
});
2. Promise.any
Resuelve cuando la primera promesa se resuelve exitosamente. Rechaza solo si todas las promesas son rechazadas.
const p1 = Promise.reject("Error 1");
const p2 = new Promise((resolve) => setTimeout(resolve, 100, "Éxito 2"));
const p3 = new Promise((resolve) => setTimeout(resolve, 200, "Éxito 3"));
Promise.any([p1, p2, p3]).then(value => {
console.log(value); // "Éxito 2"
}).catch(error => {
console.error(error); // Se ejecutaría si todas las promesas fallan
});
3.-3. Promise.race
Resuelve o rechaza tan pronto como la primera promesa se resuelva o rechace.
const p1 = new Promise((resolve) => setTimeout(resolve, 500, "Resultado p1"));
const p2 = new Promise((_, reject) => setTimeout(reject, 100, "Error p2"));
Promise.race([p1, p2]).then(value => {
console.log(value);
}).catch(error => {
console.error(error); // "Error p2", ya que es la primera en finalizar con rechazo
});
4. Promise.allSettled
Espera a que todas las promesas terminen (resueltas o rechazadas) y devuelve un array con el estado y valor o razón de cada promesa.
const p1 = Promise.resolve("Éxito p1");
const p2 = Promise.reject("Error p2");
const p3 = Promise.resolve("Éxito p3");
Promise.allSettled([p1, p2, p3]).then(results => {
results.forEach((result, index) => {
if (result.status === "fulfilled") {
console.log(`Promesa ${index + 1} cumplida con valor: ${result.value}`);
} else {
console.log(`Promesa ${index + 1} rechazada con razón: ${result.reason}`);
}
});
});