¿Qué es y para qué sirve el async y el await en la siguiente función?:
async function getMessages() {
const messages = await Model.find();
return messages;
}
¿Qué es y para qué sirve el async y el await en la siguiente función?:
async function getMessages() {
const messages = await Model.find();
return messages;
}
La declaración de async
y await
generan una función asíncrona, es decir que por dentro siguen trabajando con promesas, recordando que estas pasan por alguno de los estados siguientes:
Si observamos esta línea:
const messages = await Model.find();
Generará que la función se pause esperando que el método find()
devuelva una respuesta que pudiera tener alguno de los estados antes mencionados, una vez hecho lo anterior continuará la ejecución de la misma y retornará el resultado de la promesa en:
return messages;
Te coloco este ejemplo:
function potencia() {
return 10000 ** 2
}
async function obtenPotencia() {
const respuesta = await potencia()
return respuesta
}
Si le hacemos un console.log()
a la función asíncrona nos devolverá esto:
[object Promise] { ... }
Dado lo anterior necesitamos acceder al resultado de la promesa a través de:
then
que nos entregará el resultado de dicha acción; aquí puede quedar en el estado de resolved()catch
obtendrá el mensaje de error por el cual la promesa quedó en el estado de rejected y no logró resolverse de manera satisfactoria (si es que se presenta este caso)EJEMPLO
Ahora para obtener el estado que nos devolvió lo anterior tenemos este fragmento de código:
obtenPotencia().then((respuestaFuncion) => {
console.log(response)
}).catch((respuestaFuncion) =>{
console.log(`Algo salió mal: ${respuestaFuncion}`)
})
Donde a la función asíncrona le encadenamos ambos métodos para controlar la eventual respuesta que pudieramos estar recibiendo.
Caso 1
Si por ejemplo le cambio el nombre a la constante respuesta
a respuestas
, obtendría un resultado como este en pantalla al ejecutar el código:
"Algo salió mal: respuestas is not defined"
La promesa devolvió un rejected por que el nombre de la constante cambió y no coincide.
En cambio si respetamos la escritura de la constante, obtenemos esto:
100000000
Ejemplo completo
function potencia() {
return 10000 ** 2
}
async function obtenPotencia() {
const respuesta = await potencia()
return respuesta
}
obtenPotencia().then((respuestaFuncion) => {
console.log(`El resultado es: ${respuestaFuncion}`)
}).catch((respuestaFuncion) =>{
console.log(`Algo salió mal: ${respuestaFuncion.message}`)
})
Referencias para construir respuesta