Dans le code fourni, la première promise n'attend pas le retour de findUser() avant de continuer car :
Enveloppez la requête de base de données dans une fonction qui renvoie une promesse et résout la promesse avec le résultat de la requête :
me.findUser = function(params, res) { var username = params.username; return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { console.log("Connection "); if (err) { console.log("ERROR 1 "); res.send({"code": 100, "status": "Error in connection database"}); reject(err); // Reject the promise with the error } else { connection.query('select Id, Name, Password from Users ' + 'where Users.Name = ?', [username], function (err, rows) { connection.release(); if (!err) { resolve(rows); // Resolve the promise with the query result } else { reject(err); // Reject the promise with the error } }); } }); }); }
Le gestionnaire d'erreurs car la seconde promesse est appelée parce que la première promesse est rejetée. Cependant, le console.log("Failed"); La ligne du gestionnaire d'erreurs n'est pas exécutée car une erreur est générée à l'intérieur du bloc .then().
Pour gérer correctement le rejet de la première promesse, utilisez .catch() au lieu de .then() :
promise.then(function(data) { return new Promise(...); }, function (reason) { console.log("Failed"); });
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!