Problemas de promessa e conexão
Neste código Node.js, espera-se que uma promessa aguarde a conclusão da função findUser, que isso não acontece. O problema decorre da execução assíncrona de consultas ao banco de dados.
Função de retorno de chamada de conexão
Dentro de findUser, uma conexão com o banco de dados é estabelecida usando pool.getConnection. Esta função recebe uma função de retorno de chamada como argumento, que é chamada quando a conexão está pronta. No entanto, o código retorna dados incorretamente nesse retorno de chamada, fazendo com que indefinido seja retornado antes que a consulta seja concluída.
Para resolver isso, a função findUser deve passar um retorno de chamada para pool.getConnection que resolva ou rejeite uma promessa, indicando se a consulta foi bem-sucedida ou não.
Encadeamento de promessas
O uso de promessas permite que o código seja executado sequencialmente. No código fornecido, a primeira promessa deve ser encadeada à próxima promessa usando then em vez de funções de retorno de chamada, conforme mostrado abaixo:
promise.then(function(rows) { return new Promise(function (resolve, reject) { loginC.doSomething(data); if (success) { resolve(data); } else { reject(reason); } }); }, function(reason) { console.log("error handler second"); });
Tratamento de erros
O motivo pelo qual a mensagem "segundo manipulador de erros" é exibida é porque ocorre um erro quando a conexão com o banco de dados falha. O tratamento de erros no ouvinte de eventos connection.on('error') não é usado corretamente. Este erro se propaga para a função findUser e é capturado pelo segundo manipulador de erros no encadeamento.
A função findUser deve rejeitar a promessa com a mensagem de erro, que será então propagada para o manipulador de erros na cadeia de promessas .
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3