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 Réponses :
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); })()
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
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); });
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);
Les valeurs étant renvoyées sont toujours dans le rappel de sorte que la fonction ASYNC renvoie toujours non défini code>. Ce n'est pas
attendre code> pour la fonction Async non plus.
La console
console.log ("Prix de l'élément est:" + itemPrice); code> 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); code> exécute la valeur de l'élémentPrice. En effet, la fonction de rappel appelée dans la fonction
mysql.pool.Query code> 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.