O async / waitit bloqueia o loop de eventos? [duplicado]
Esta pergunta já tem uma resposta aqui:
Async / waitit bloqueiam um thread node.js 5 respostasEm JavaScript, o uso de aguardar dentro de um loop bloqueia o loop? 4 respostaseu estava lendoNão bloqueie o loop de eventos no guia Node.js. Havia uma linha dizendo:
Você nunca deve bloquear o loop de eventos. Em outras palavras, cada um de seus retornos de chamada em JavaScript deve ser concluído rapidamente. Isto também se aplica ao seuawait
é seuPromise.then
e assim por diante.
Comecei a me perguntar, e se alguma chamada de API para o banco de dados que eu souawait
demora para resolver, isso significa que bloqueei o loop de eventos com esseawait
ligar?
Depois disso, comecei a testar alguns códigos auto-escritos, mas após o teste ainda não estou claro como o bloqueioawait
trabalho. Aqui estão alguns códigos de teste:
Supondo que estou usando express para teste. Entendo por que fazer duas chamadas de API para o/test
route bloqueia o loop de eventos nesse caso.
function someHeavyWork() {
// like calling pbkdf2 function
}
app.get('/test', (req, res) => {
someHeavyWork();
res.json(data);
});
Mas isso não acontece neste 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);
})
Isso pode ser devido à minha falta de compreensão de como funciona o bloqueio no caso deasync/await
.