2016-06-25 14 views
1

Okeyだから、これはスコープで何かする必要があると思いますが、javascriptにはかなり新しいです。データベースクエリの機能の中でtotalSumは値を持っていますが、誰かを助けてくれますか?JavaScriptのグローバル変数が必要な値に設定されていません

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") 
    } 
+0

varがTOTALSUM = '0' sumDoughnut'イベント – guest271314

+3

の外にそれはタイミングの問題です '定義してください。クエリコールバックは非同期なので、2番目の 'console.log()'文が実行されてからずっと後になるまで、実行されません。新しい 'totalSum'値を使用することを期待するコードは、コールバックの内側ではなく、コールバックの内側にある必要があります。 – jfriend00

+0

@ guest271314それを試してみたが、役に立たない。 – Nick

答えて

1

コメントに記載されているように、範囲は正しいです。問題はconsole.logへの呼び出しがコールバックにあるべきで、外部ではないことです。

コールバックに入れないと、console.logコールはデータベース呼び出し後にimmeditalyを実行し、DBの応答を待機しません。 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") 
    }); 
} 
関連する問題