nodeJS renvoie la valeur du rappel

Je construis une application dans laquelle, pour un appel particulier, je dois bloquer et attendre les résultats d’une requête d’authentification avant de continuer.

function authenticate(userid, hash) { mysql_client.query("SELECT `hash` FROM `auth` WHERE `userid` = " + userid, function selectCb(err, results, fields) { if (err) { client.send("Error communicating with mysql, please retry your request"); return false; } if(results.length == 0 || results[0].hash != hash) { client.send("Error comparing authentication data with database, please retry request"); return false; } return true; } ); } 

Je veux pouvoir renvoyer ces valeurs à partir de la fonction authenticate () elle-même, et non de la fonction anonyme interne selectCb, et disposer d’un bloc d’authentification jusqu’à la fin du rappel. Comment puis-je m’y prendre?

Votre fonction externe doit fournir un callback lui-même qui peut être exécuté une fois que l’appel mysql est terminé. Quelque chose dans le sens de ceci:

 function authenticate(user, pass, callback) { mysql_client.query("...", function (err, results, fields) { if (err) { callback("Error communicating ..."); } else if (results.length ...) { callback("Error comparing authentication..."); } callback() }); }); 

Exemple d’utilisation:

 authenticate('jim', '123456', function (err) { if (err) { alert(err); } else { alert('Welcome'); } });