function getData(callback){
const sql =`INSERT INTO receipiant (name, address ,bloodgroup,emailid ,phonenumber ) VALUES ('${name}','${address}','${bloodgroup}','${emailid}','${phonenumber}');SELECT bloodbank.name, donor.donname,donor.phoneno,donor.address,donor.emailid,donor.dateofbirth FROM bloodbank INNER JOIN donor ON donor.bbid=bloodbank.idbloodbank WHERE donor.bloodgroup = '${bloodgroup}'`
connection.query(sql,(err,result)=>{
if(err)
callback(err,null)
else
callback(null,result)
})
}
var msgres
getData(function(err,data){
if (err) {
// error handling code goes here
console.log("ERROR : ",err);
} else {
// code to execute on data retrieval
// console.log("result from db is : ",data);
var msgres = Object.assign({},data)
}
});
console.log(msgres)
数据被复制到函数的msgres变量中,msgres只在函数内显示,但当我尝试在函数外记录它时,它会显示未定义的值,但我已经在函数外声明了变量。我也尝试使用let关键字,但它仍然显示相同的值,但当我打开控制台时把它记录在函数中,它可以正常工作。
1条答案
按热度按时间wi3ka0sx1#
这是因为当您登录msgres时getdata还没有完成执行。
在node.js中,大多数i/o都是异步的,因此您将经常看到这种类型的问题。
最好的方法是将数据传递给回调中的处理函数。
你也不需要克隆返回的数据,只要把它传回去就行了!
例如: