Javascript global var未设置为所需值

时间:2016-06-25 23:34:03

标签: javascript

Okey所以我认为这必须与范围有关,但是对于javascript来说我是相当新的。在数据库查询的功能中,totalSum有一个值,但是当我要求函数外的值时,它表示它的0.有人帮帮我吗?

 socket.on('sumDoughnut', function(data){

    var totalSum = 0;


        mysqlConnection.query('SELECT SUM(value) AS Total FROM doughnut', function(err, row, results){
                    if(err) {io.to(socket.id).emit('err_client', { code : 22 });console.log("MySQL error: " + err);if(err.code === 'PROTOCOL_CONNECTION_LOST'){handleDisconnect();}}
                    totalSum = row[0].Total;
                    console.log("here it is " + totalSum);
                });

        console.log(totalSum + " totalSum")
    }

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,范围是正确的。问题是对console.log的调用应该在回调中,而不是在外面。

如果你没有把它放在回调中,console.log调用将在数据库调用后立即执行,而不是等待数据库的响应。一旦DB返回值,就会触发回调。

这将解决它:

socket.on('sumDoughnut', function(data){
    var totalSum = 0;

    mysqlConnection.query('SELECT SUM(value) AS Total FROM doughnut', function(err, row, results){
        if(err) {io.to(socket.id).emit('err_client', { code : 22 });console.log("MySQL error: " + err);if(err.code === 'PROTOCOL_CONNECTION_LOST'){handleDisconnect();}}

        totalSum = row[0].Total;
        console.log(totalSum + " totalSum")
    });
}