I'm trying to query my mysql database for a value using Async/Await but my constant 'map' always returns undefined, I am not too sure why
const get_map = () =>{
db.query('SELECT game,game2 FROM battles WHERE player1=? OR player2=?',[result.char,result.char],(err,results)=>{
if(err){
return(err)
}
if(!results[0]){
return('No such battle?')
}
console.log(results[0])
return(results[0])
})
}
const proccessTurn = async ()=>{
const map = await get_map()
console.log(map)
let game = JSON.parse(map.game)
let game2 = JSON.parse(map.game2)
const char = result.char
const playerTurn = game2.turn[0]
}
The console doesn't even log
console.log(results[0])
This line so why does the await function resolve before it actually returns something? Shouldn't it wait for the returns?
Thank you for the help
As the mysql library doesn't support promises, you can use the promisify util function from Node.js like this:
const { promisify } = require('util');
const query = promisify(db.query).bind(db);
const get_map = async () => {
try {
const result = await query('SELECT game,game2 FROM battles WHERE player1=? OR player2=?',[result.char,result.char]);
if(!results[0]){
return 'No such battle?';
}
console.log(results[0])
return results[0];
}
catch(e) {
return e;
}
}
const proccessTurn = async ()=>{
const map = await get_map()
console.log(map)
let game = JSON.parse(map.game)
let game2 = JSON.parse(map.game2)
const char = result.char
const playerTurn = game2.turn[0]
}
The third parameter to db.query() is a callback. If you're returning anything in callback it's actually returned to the function itself, (db.query in this case). You're not returning anything from get_map(). So return a new promise from get_map like this,
const get_map = () =>{
return new Promise((resolve, reject) => {
db.query('SELECT game,game2 FROM battles WHERE player1=? OR player2=?',[result.char,result.char],(err,results)=>{
if(err){
reject(err)
}
if(!results[0]){
reject('No such battle?')
}
console.log(results[0])
resolve(results[0])
}
});
}
const proccessTurn = async ()=>{
const map = await get_map()
console.log(map)
let game = JSON.parse(map.game)
let game2 = JSON.parse(map.game2)
const char = result.char
const playerTurn = game2.turn[0]
});