Problèmes de promesse et de connexion
Dans ce code Node.js, une promesse est attendue pour attendre la fin de la fonction findUser, qui ce n'est pas le cas. Le problème provient de l'exécution asynchrone des requêtes de base de données.
Fonction de rappel de connexion
Dans findUser, une connexion à la base de données est établie à l'aide de pool.getConnection. Cette fonction prend une fonction de rappel comme argument, qui est appelée lorsque la connexion est prête. Cependant, le code renvoie de manière incorrecte des données dans ce rappel, ce qui entraîne le renvoi d'un défini avant la fin de la requête.
Pour résoudre ce problème, la fonction findUser doit transmettre un rappel à pool.getConnection qui résout ou rejette une promesse, indiquant si la requête a réussi ou non.
Chaînage des promesses
L'utilisation de promesses permet d'exécuter du code séquentiellement. Dans le code fourni, la première promesse doit être chaînée à la promesse suivante en utilisant then au lieu des fonctions de rappel, comme indiqué ci-dessous :
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"); });
Gestion des erreurs
La raison pour laquelle le message "Gestionnaire d'erreurs en deuxième" est affiché parce qu'une erreur se produit lorsque la connexion à la base de données échoue. La gestion des erreurs dans l'écouteur d'événement connection.on('error') n'est pas utilisée correctement. Cette erreur se propage à la fonction findUser et est capturée par le deuxième gestionnaire d'erreurs du chaînage.
La fonction findUser doit rejeter la promesse avec le message d'erreur, qui sera ensuite propagé au gestionnaire d'erreurs dans la chaîne de promesse. .
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3