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}`); } }); });