"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso encadear promessas corretamente em Node.js ao trabalhar com consultas de banco de dados?

Como posso encadear promessas corretamente em Node.js ao trabalhar com consultas de banco de dados?

Publicado em 2024-11-21
Navegar:221

How Can I Chain Promises Correctly in Node.js When Working with Database Queries?

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 .

Tutorial mais recente Mais>

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