¿Async / await blocks event loop? [duplicar
Esta pregunta ya tiene una respuesta aquí:
Async / await bloquea un hilo node.js 5 respuestas En JavaScript, ¿el uso de `await` dentro de un bucle bloquea el bucle? 4 respuestasEstaba leyendo No bloquee el bucle de eventos de la guía Node.js. Había una línea que decía:
Debes asegurarte de nunca bloquear el bucle de eventos. En otras palabras, cada una de sus devoluciones de llamada de JavaScript debe completarse rápidamente. Por supuesto, esto también se aplica a suawait
's, tuPromise.then
's, y así sucesivamente.
Empecé a preguntarme, ¿qué pasaría si, alguna llamada de API a la base de datos que soyawait
ing está tardando un tiempo en resolverse, ¿eso significa que he bloqueado el bucle de eventos con esaawait
¿llamada
Después de eso, comencé a probar algunos códigos escritos por mí mismo, pero después de la prueba todavía no tengo claro cómo bloquear a través deawait
trabajos. Aquí hay algunos códigos de prueba:
Asumiendo, que estoy usando express para probar. Entiendo por qué hacer 2 llamadas API a la/test
route bloquea el bucle de eventos en este caso.
function someHeavyWork() {
// like calling pbkdf2 function
}
app.get('/test', (req, res) => {
someHeavyWork();
res.json(data);
});
Pero eso no sucede en este caso.
function fakeDBCall() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(data);
}, 5000)
})
}
app.get('/test', async (req, res) => {
const data = await fakeDbCall();
res.json(data);
})
Esto puede deberse a mi falta de comprensión de cómo funciona el bloqueo en el caso deasync/await
.