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 incorrectement des données dans ce rappel, ce qui entraîne le renvoi d'un élément 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 le code de manière séquentielle. 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
Le La raison pour laquelle le message « gestionnaire d'erreurs deuxième » est affiché est 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. .
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!