0
votes

Impossible d'obtenir le résultat en dehors de la fonction de requête dans Express Nodejs

J'essaie d'obtenir la valeur de la variable W_Name Query externe même que j'ai défini w_name avant la requête mais ne peut pas l'obtenir après la requête. Veuillez vérifier le code et aider: xxx

console.log indiquant non défini mais si je mets console.log à l'intérieur de la requête après < Code> W_NAME Il montre un résultat approprié. Qu'est-ce qui ne va pas?


0 commentaires

3 Réponses :


0
votes

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.

check Cet article pour comprendre JavaScript asynchrone. P>

           connection.query('SELECT * FROM workstations WHERE id=?', 
                    [results[0].w_id],function(err,res,field){

                    w_name = res[0].name;
                      console.log(w_name);
            });


0 commentaires

0
votes

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: xxx

Vous pouvez maintenant utiliser puis pour obtenir la valeur ou utiliser async attendre pour obtenir la valeur comme celle-ci. xxx


2 commentaires

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



0
votes

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);


0 commentaires