【问题标题】:Connection.query() return value cannot be duplicated outside the functionConnection.query() 返回值不能在函数外重复
【发布时间】: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 声明为新变量,而不是分配给现有变量

标签: mysql node.js


【解决方案1】:

发生这种情况是因为当您记录 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);
    }    
});

【讨论】:

    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2019-02-10
    相关资源
    最近更新 更多