Connection.query()返回值不能在函数外部重复

时间:2018-10-28 08:13:46

标签: mysql node.js

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 个答案:

答案 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);
    }    
});