Solución:
Para despejar algunas dudas –
- Puedes usar
await
con cualquier función que devuelva una promesa. La función que está esperando no necesita serasync
necesariamente. - Deberías usar
async
funciones cuando desee utilizar elawait
palabra clave dentro de esa función. Si no vas a usar elawait
palabra clave dentro de una función, entonces no necesita hacer esa funciónasync
. -
async
las funciones por defecto devuelven una promesa. Esa es la razón por la que puedesawait
async
funciones.
Desde MDN –
Cuando se llama a una función asíncrona, devuelve una Promesa.
En lo que respecta a su código, podría escribirse así:
const getUsers = (ms) => { // No need to make this async
return new Promise(resolve => setTimeout(resolve, ms));
};
// this function is async as we need to use await inside it
export const index = async (req, res) => {
await getUsers(5000);
res.json([
{
id: 1,
name: 'John Doe',
},
{ id: 2,
name: 'Jane Doe',
},
]);
};
Usted puede await
cualquier promesa en un async
función. El código después del await
se ejecutará después de que finalice la promesa que está esperando.
Esta es una gran alternativa a las devoluciones de llamada clásicas de JavaScript.
Escribí un blog al respecto -> https://github.com/Gameye/js-async ¡Espero que esto te ayude!
Funciones asincrónicas en Javascript
los async
palabra clave convierte una declaración de función JS normal en una declaración de función asincrónica:
function syncFunc {// dostuff}
async function asyncFunc {// dostuff} // the async keyword is placed before the function keyword
Una función asincrónica devuelve una promesa:
- Cuando la función asíncrona devuelve un valor, la Promesa se resolverá con el valor devuelto.
- Cuando la función asíncrona arroja una excepción o algún valor, la Promesa se rechazará con el valor arrojado.
Dentro de una función asíncrona, puede usar la await
palabra clave. await
colocado antes de una promesa hace que la función asincrónica se detenga hasta que la promesa se establezca (ya sea rechazada o cumplida)
- . Cuando la promesa se cumpla El valor de la
await
expresión es el valor de la promesa cumplida. - Cuando la promesa es rechazada,
await
expresión lanza el valor rechazado.
Ejemplo:
function makePromise(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 1000);
});
}
async function asyncFunc() {
var x = await makePromise(1); // the function is paused here until the promise is fulfilled
console.log(x); // logs 1
return x;
}
const returnedProm = asyncFunc(); // the async func returns a promise
returnedProm.then((x) => console.log(x));
// This promise is fulfilled with the return value from the async func, so this logs 1
Cuándo usar funciones asincrónicas:
Las funciones asincrónicas son una herramienta útil cuando tiene múltiples acciones asincrónicas (implementadas como promesas) que dependen unas de otras. Por ejemplo, cuando su segunda promesa necesita datos que le proporcionará su primera promesa. Ahora puede utilizar cómodamente el await
palabra clave para recibir primero los datos en la promesa 1 y luego pasar estos datos como un argumento para la promesa 2.
En otras palabras, la función asincrónica puede a través del await
La palabra clave hace que la programación asincrónica se comporte como la programación sincrónica. Como consecuencia, sus aplicaciones son más fáciles de entender.