curso node async y await

para simplificar la programacion usaremos async y await

entonces una funcion promesa como esta

let getNombre=()=>{
return new Promise( (resolve,reject)=>{
resolve('Israel');
})
}

se podria escribir asi:

let getNombre=async()=>{
  return 'ISrael';
}

donde lo que se retorna es nuestro resolve, por lo que la respuesta se seguiria tratando como en el caso de la funcion promesa

getNombre().then(nombre=>{
console.log(nombre);
})


todo error que se genere en la funcion async sera atrapada en la seccion catch de la llamada

let getNombre=async()=>{
  undefined.nombre; // error generado adrede a modo de ejemplo
  return 'ISrael';
}

getNombre().then(nombre=>{
console.log(nombre);
}).catch(error=>{
   console.log('Ha ocurrido un error', error);
})

si se quiere generar un error con un mensaje personalizado usaremos la clase Error y la lanzaremos


let getNombre=async()=>{
  throw new Error('el nombre no fue encontrado'); // error generado adrede a modo de ejemplo
  return 'ISrael';
}


AWAIT (se usa dentro de una funcion de tipo async)

sirve para hacer una llamada a una funcion asincrona pero no continua hasta que esta no le devuelva un resultado. Es como si simulara un comportamiento sincrono.


Entonces por ejemplo si queremos hacer una funcion saludo que necesita el nombre para armar el mensaje de saludo se podria usar el operador await, asi:

let saludo= async()=>{
  let nombre = await getNombre();
  return `hola ${nombre}`;
}

saludo().then(mensaje=>{
console.log(mensaje);
})



usando las funciones que habiamos hecho para getEmpleado y getSalario vamos a crear otra para obtener la informacion usando async y await, para ver como se simplifica todo

let empleados = [
{
  id:1,
  nombre:'luis'
},
{
  id:2,
  nombre:'maria'
},
{
  id:3,
  nombre:'javier'
}

];

let salarios = [
{
  empleado_id:1,
  salario:1000
},
{
  empleado_id:2,
  salario:2000
}
];

let getEmpleado=(id)=>{

    return new Promise( (resolve,reject)=>{
     
        let empleadoEncontrado=empleados.find(empleado => empleado.id === id);

        if(!empleadoEncontrado){
            reject(`no se encontro ningun empledo con id: ${id}`);
        }else{
            resolve(empleadoEncontrado);
        }

    });
  
}

let getSalario=(empleado)=>{
    return new Promise((resolve,reject)=>{
        let salarioEncontrado=salarios.find(salario => salario.empleado_id === empleado.id);

        if(!salarioEncontrado){
            reject(`no se encontro ningun salario para el empleado: ${empleado.nombre}`);
        }else{
            let respuesta={
                nombre:empleado.nombre,
                salario: salarioEncontrado.salario
            };
            resolve(respuesta);
        }
    });
}



let informacion = async(id)=>{

    let empleado = await getEmpleado(id);

    let salario = await getSalario(empleado);

    return `El Salario de ${empleado.nombre} es de ${salario.salario} pesos`;
}




informacion(10).then(mensaje=>console.log(mensaje))
.catch(error=>console.log(error));

No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable