Maison >base de données >tutoriel mysql >Pourquoi ma promesse est-elle résolue prématurément dans Node.js avec Express et Promises ?
Dans votre code, la promesse créée pour la fonction findUser s'exécute immédiatement, mais la fonction elle-même est asynchrone. Par conséquent, la promesse se résout prématurément avant que findUser puisse récupérer des données.
Modifiez votre fonction findUser pour renvoyer une promesse au lieu d'essayer de renvoyer des valeurs de manière synchrone. Voici un exemple :
me.findUser = function(params, res) { var username = params.username; return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { if (err) { reject(err); return; } connection.query('select Id, Name, Password from Users ' + 'where Users.Name = ?', [username], function (err, rows) { connection.release(); if (err) { reject(err); } else { resolve(rows); } }); }); }); }
Le message « gestionnaire d'erreurs deuxième » apparaît car le gestionnaire d'erreurs de la deuxième promesse est rejeté lorsque findUser rencontre une erreur. Pour résoudre ce problème, modifiez le code comme suit :
promise.then(function(data) { return new Promise(function (resolve, reject) { loginC.doSomething(data); if (success) { console.log("Success 2"); resolve(data); } else { console.log("Failed 2"); reject("Error in doSomething"); } }); }).catch(function (reason) { console.log("Error in findUser: " + reason); });
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!