0
votes

Variable non retenue de la valeur

Je tente de définir une variable pour les résultats obtenus à partir d'une requête, mais la variable ne conserve pas la valeur.

var queryString = "SELECT price FROM menu_items WHERE id = " + 
    req.query.items + ";";
mysql.pool.query(queryString, function(err, rows, fields){
    if (err){
        next(err);
        return;
    }
    itemPrice = rows[0].price;
    console.log("item price is2: " + itemPrice);
});

console.log("item price is: " + itemPrice);


3 commentaires

La console console.log ("Prix de l'élément est:" + itemPrice); instruction fonctionnera en premier. Ici, la variable itemPicit n'a aucune donnée, il est donc indifférent indéfini. Lorsque la console.log ("Prix d'élément IS2:" + élémentPrice); exécute la valeur de l'élémentPrice. En effet, la fonction de rappel appelée dans la fonction mysql.pool.Query fonctionnera de manière asynchrone.


Comment puis-je le faire pour qu'il attend jusqu'à ce que la requête soit terminée?


Vous ne pouvez pas attendre que la requête soit terminée. Si vous souhaitez exécuter la dernière console.log Pour exécuter uniquement une fois que la requête a terminé, vous pouvez renvoyer une promesse d'après la requête exécutée et exécuter la dernière console.log uniquement lorsque la promesse est remplie.


3 Réponses :


0
votes
const {promisify} = require('util');
(async ()=> {
    var queryString = "SELECT price FROM menu_items WHERE id = " + 
        req.query.items + ";";
        const query = promisify( mysql.pool.query).bind(mysql.pool);
        const result = await query(queryString)
            if (!result) {
                next(result);
                return;
            }
            console.log(result)
            itemPrice = result[0].price;
            console.log("item price is2: " + itemPrice);
            console.log("item price is: " + itemPrice);
})()

2 commentaires

D'accord, je peux comprendre cela, mais comment puis-je le faire pour que les lignes suivantes ne démarrent pas exécutant tant que l'appel de DB est terminé?


S'il vous plaît trouver l'async attendre la voie, dans la réponse



0
votes

var queryString = "SELECT price FROM menu_items WHERE id = " + 
    req.query.items + ";";
mysql.pool.query(queryString, function(err, rows, fields){
    if (err){
        next(err);
        return;
    }
    itemPrice = rows[0].price;
    console.log("item price is2: " + itemPrice);
    console.log("item price is: " + itemPrice);
});


0 commentaires

0
votes
you can do it using following method

export const getPriceValue = async () => {

var queryString = "SELECT price FROM menu_items WHERE id = " + 
    req.query.items + ";";
mysql.pool.query(queryString, function(err, rows, fields){
    if (err){       
        return 0;
    }
    if(row) {
      return(rows[0].price);
    }

});
}
let priceValue = await getPriceValue();
console.log('price::', priceValue);

1 commentaires

Les valeurs étant renvoyées sont toujours dans le rappel de sorte que la fonction ASYNC renvoie toujours non défini . Ce n'est pas attendre pour la fonction Async non plus.