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关键字,但它仍然显示相同的内容,但是当我在函数内部登录它时,它可以正常工作。
答案 0 :(得分:0)
之所以发生这种情况,是因为您在登录msgres时getData尚未完成执行。
在node.js中,大多数I / O是异步的,因此您会经常看到这种类型的问题。
最好的处理方法是将数据传递给回调中的处理函数。
您也无需克隆返回的数据,只需将其传递回去!
例如:
function processData(data) {
console.log("processData: processing: ", data);
// do whatever with data here.
}
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);
processData(data);
}
});