"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo encadenar promesas correctamente en Node.js cuando trabajo con consultas de bases de datos?

¿Cómo puedo encadenar promesas correctamente en Node.js cuando trabajo con consultas de bases de datos?

Publicado el 2024-11-21
Navegar:130

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

Problemas de conexión y promesa

En este código de Node.js, se espera que una promesa espere hasta que se complete la función findUser, que no es así. El problema surge de la ejecución asincrónica de consultas de bases de datos.

Función de devolución de llamada de conexión

Dentro de findUser, se establece una conexión a la base de datos mediante pool.getConnection. Esta función toma una función de devolución de llamada como argumento, que se llama cuando la conexión está lista. Sin embargo, el código devuelve datos incorrectamente dentro de esta devolución de llamada, lo que provoca que se devuelva un valor indefinido antes de que se complete la consulta.

Para solucionar este problema, la función findUser debe pasar una devolución de llamada a pool.getConnection que resuelve o rechaza una promesa. indicando si la consulta fue exitosa o no.

Encadenamiento de promesas

El uso de promesas permite ejecutar código secuencialmente. En el código proporcionado, la primera promesa debe encadenarse a la siguiente promesa usando entonces en lugar de funciones de devolución de llamada, como se muestra a continuación:

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");
});

Manejo de errores

La razón por la que aparece el mensaje "segundo controlador de errores" es porque se produce un error cuando falla la conexión de la base de datos. El manejo de errores en el detector de eventos Connection.on('error') no se utiliza correctamente. Este error se propaga a la función findUser y es capturado por el segundo controlador de errores en el encadenamiento.

La función findUser debe rechazar la promesa con el mensaje de error, que luego se propagará al controlador de errores en la cadena de promesas. .

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3