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';
}
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