【发布时间】:2018-10-28 08:13:46
【问题描述】:
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 关键字,但它仍然显示相同,但是当我在函数内进行控制台记录时,它工作正常。
【问题讨论】:
-
您的第二个 console.log 在数据从数据库中出来之前运行,因为日志是同步的,但检索是异步的。此外,如果不是这种情况,它仍然无法工作,因为您在函数中将 msgres 声明为新变量,而不是分配给现有变量