Reputation: 373
I have a function called uploadData in which i am calling getClientId to get the clientid. Inside the getclientId function i can get the return value. But i cant access that return value in the uploadData function. In console i am getting undefined.
uploadData(con, data, callback) {
var total = parseFloat(data.pricelist) + parseFloat(data.print)
var ac = parseFloat(total)*parseFloat(data.quantity)
var sold = parseFloat(data.soldprice)*parseFloat(data.quantity)
var rd = parseFloat(data.sold) - parseFloat(total)
var rt = parseFloat(rd) * parseFloat(data.quantity)
var client =data.client.toLowerCase()
var clientId = this.getClientId(con, data,callback)
console.log(clientId)
}
getClientId(con, data,callback) {
var client =data.client.toLowerCase()
con.query(`SELECT * from client where lower(name) = '${client}'`, function(err, rows) {
if(err) {
return err
}
else{
if(rows.length>0){
return rows[0].id
}
else{
con.query(
`INSERT INTO client SET
name = '${data.client}',
created_by = '${data.user_id}'`,
function(er, row) {
if(er){
return er
}
else{
return row.insertId
}
}
)
}
}
});
}
Upvotes: 0
Views: 26
Reputation: 685
You can convert your function to Promise and then use async/await it will be much more readable in terms of using async call functions
getClientId(con, data,callback) {
return new Promise((resolve,reject)=>{
var client =data.client.toLowerCase()
con.query(`SELECT * from client where lower(name) = '${client}'`, function(err, rows) {
if(err) {
reject(err)
}
else{
if(rows.length>0){
resolve(rows[0].id)
}
else{
con.query(
`INSERT INTO client SET
name = '${data.client}',
created_by = '${data.user_id}'`,
function(er, row) {
if(er){
reject(er)
}
else{
resolve(row.insertId)
}
}
)
}
}
});
}
)
}
and then consume this function as
const clientId = await this.getClientId(con, data,callback);
Upvotes: 1