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.
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'); } }); } }); }); }
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.
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!