Async/Await y promesas

Promesas

 

Las promesas son objetos que representan la eventual finalización (o fallo) de una operación asíncrona.

 

const miPromesa = new Promise((resolve, reject) => {
  setTimeout(() => {
    const exito = true;
    if (exito) {
      resolve("Operación completada");
    } else {
      reject("Error en la operación");
    }
  }, 2000);
});

miPromesa
  .then(resultado => console.log(resultado))
  .catch(error => console.error(error));

Async/Await

Async y await son una forma más limpia de trabajar con promesas.

 

async function obtenerDatos() {
  try {
    const respuesta = await fetch('https://api.ejemplo.com/datos');
    const datos = await respuesta.json();
    console.log(datos);
  } catch (error) {
    console.error('Error al obtener datos:', error);
  }
}

obtenerDatos();

Combinando promesas y async/await

function esperar(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function procesarTareas() {
  console.log('Iniciando tareas');
 
  await esperar(2000);
  console.log('Tarea 1 completada');
 
  await esperar(1500);
  console.log('Tarea 2 completada');
 
  await esperar(1000);
  console.log('Tarea 3 completada');
 
  console.log('Todas las tareas completadas');
}

procesarTareas();

 

En este último ejemplo, `esperar` es una función que devuelve una promesa que se resuelve después de un tiempo especificado. La función `procesarTareas` usa `async/await` para esperar que cada tarea se complete antes de pasar a la siguiente.

 

Puedes usar varias técnicas dependiendo de tus necesidades:

 

Promise.all: Espera a que todas las promesas en un array se resuelvan o se rechacen. Retorna una nueva promesa que se resuelve con un array de los resultados de las promesas.

 

const promise1 = fetch('url1').then(response => response.json());
const promise2 = fetch('url2').then(response => response.json());

Promise.all([promise1, promise2])
  .then(([data1, data2]) => {
    console.log(data1, data2);  // Utiliza los datos de ambas promesas
  })
  .catch(error => console.error(error));  // Maneja errores si alguna promesa falla
 
Promise.allSettled: Espera a que todas las promesas en un array se completen, independientemente de si se resuelven o se rechazan. Retorna una nueva promesa que se resuelve con un array de objetos que describen el resultado de cada promesa.
 
const promise1 = fetch('url1').then(response => response.json());
const promise2 = fetch('url2').then(response => response.json());


Promise.allSettled([promise1, promise2]) .then(results => {    
  results.forEach(result => {      
  if (result.status === 'fulfilled') {        
    console.log(result.value); 
    // Utiliza el valor si la promesa se resolvió      
} else {        
   console.error(result.reason); 
   // Maneja el error si la promesa fue rechazada       
}    
   });  
});

 

Promise.any: Espera a que se resuelva al menos una de las promesas en un array. Retorna una nueva promesa que se resuelve con el resultado de la primera promesa que se resuelve. Si todas las promesas se rechazan, se rechaza con una AggregateError.

 

const promise1 = fetch('url1').then(response => response.json());
const promise2 = fetch('url2').then(response => response.json());

Promise.any([promise1, promise2])
  .then(result => console.log(result))  // Utiliza el resultado de la primera promesa que se resolvió
  .catch(error => console.error(error));  // Maneja el error si todas las promesas fueron rechazadas

 

Promise.race: Retorna una nueva promesa que se resuelve o se rechaza tan pronto como una de las promesas en el array se resuelva o se rechace.

 

const promise1 = fetch('url1').then(response => response.json());
const promise2 = fetch('url2').then(response => response.json());

Promise.race([promise1, promise2])
  .then(result => console.log(result))  // Utiliza el resultado de la primera promesa que se resolvió o se rechazó
  .catch(error => console.error(error));

¿Te ha resultado útil??

0 / 0

Deja una respuesta 0

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.