J'essaie d'obtenir la valeur de la variable W_Name Query externe même que j'ai défini w_name code> avant la requête mais ne peut pas l'obtenir après la requête. Veuillez vérifier le code et aider:
console.log code> indiquant non défini mais si je mets
console.log code> à l'intérieur de la requête après < Code> W_NAME CODE> Il montre un résultat approprié. Qu'est-ce qui ne va pas? P> P>
3 Réponses :
check Cet article pour comprendre JavaScript asynchrone. P> connexion.Quisery (... paramètres) code> est une fonction asynchrone, ce qui nécessite un certain temps pour lire et obtenir des données résultantes pour la requête transmise.
Définition de
console.log (w_name) code> impression indéfini car le résultat n'est pas encore attribué à la variable W_Name. Alors que la définition de la fonction de rappel à l'intérieur attribue la valeur à W_Name.
connection.query('SELECT * FROM workstations WHERE id=?',
[results[0].w_id],function(err,res,field){
w_name = res[0].name;
console.log(w_name);
});
Nodejs est asynchrone, il utilise le rappel pour les résultats.
La meilleure solution aussi loin que je connaisse de votre problème est donnée ci-dessous: Vous pouvez maintenant utiliser puis code> pour obtenir la valeur ou utiliser
async Code>
attendre code> pour obtenir la valeur comme celle-ci. p>
ASYNC Fonction MyQuery () {Retour Nouvelle promesse ((((((((((((Résoudre, rejet) => {Connection.Query ('Select * à partir de postes de travail où id =?', [Résultats [0] .w_id], fonction (ERR, RES, champ) {w_name = res [0] nom; résolution (w_name)});})} index de fonction async () {w_name = attendre myQuery ()} console.log (w_name);
Essayez d'imprimer le message de la fonction d'index. J'ai légèrement modifié mon code pour refléter le changement
Ici, vous pouvez utiliser promess () code> et
résolution () code> la requête du résultat.
const w_name = await new Promise(function(resolve, reject) {
connection.query('SELECT * FROM workstations WHERE id=?', [results[0].w_id], function(err, res, field) {
if (err) throw err
resolve(res[0].name);
})
});
console.log(w_name);