Maison > base de données > tutoriel mysql > le corps du texte

Pourquoi ma promesse dans Node.js Express n'attend-elle pas la fin de la requête de base de données ?

DDD
Libérer: 2024-11-19 02:22:02
original
889 Les gens l'ont consulté

Why Is My Promise in Node.js Express Not Waiting for the Database Query to Complete?

Les promesses ne se comportent pas comme prévu dans Node.js Express

Comprendre le problème

Dans le code fourni, la promesse ne suspend pas l'exécution de le code pour attendre la fin de la fonction findUser. En effet, la fonction findUser ne renvoie pas de promesse. Au lieu de cela, il renvoie immédiatement undefined, ce qui entraîne la poursuite du code sans attendre la fin de la requête de base de données.

Correction du code

Pour résoudre ce problème, la fonction findUser doit renvoyer une promesse qui se résout avec les lignes récupérées de la base de données :

me.findUser = function(params, res) {
    var username = params.username;

    return new Promise(function (res, rej) {
        pool.getConnection(function (err, connection) {
            if (err) {
                rej('db error');
            } else {
                connection.query('SELECT Id, Name, Password FROM Users WHERE Users.Name = ?', [username], function (err, rows) {
                    connection.release();
                    if (!err) {
                        res(rows);
                    } else {
                        rej('other error');
                    }
                });
            }
        });
    });
}
Copier après la connexion

Avec ce changement, la promesse mettra en pause l'exécution du code et attendra la fin de la requête avant de procéder à la if/else.

Explication du gestionnaire d'erreurs

Le gestionnaire d'erreurs du gestionnaire d'erreurs est généré car la fonction findUser rejette la promesse avec un message d'erreur. Cela entraîne l'omission du gestionnaire then et l'appel du gestionnaire catch (avec le message « gestionnaire d'erreurs seconde »).

Pour résoudre ce problème, assurez-vous que la fonction findUser gère les erreurs et les résout avec le résultat souhaité. données correctement. De plus, vous pouvez ajouter la gestion des erreurs au niveau suivant de la chaîne de promesses pour gérer les erreurs ultérieures.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal