2017-09-08 6 views
0

ノードjsのグローバル変数値からmysqlを接続した後、未接続の内部接続を示しています。正しい値を与えるために何をすべきですか?mysqlをノードjsに接続した後グローバル変数の値が未定義

var a = "100000"; 
var con = mysql.createConnection({ 
        host: "xyz.com", 
        user: "db", 
        password: "db", 
        database: "truck" 
     }); 
for (var i = 0; i < a.length; i++) 
{ 
    var p = a.substring(0,1);//p is 1 now 
    con.connect(function(err) {         
    con.query("SELECT * FROM at_device_fault", function (err, result, fields) { 
       console.log(p);//here p is undefined here what should do for correct value(1)? 
     }); 
    }); 
}  
+0

使用している_actual_コードですか? – robertklep

+0

いいえ、これは私の実際のコードではありません –

+0

最終的には、あなたの 'var'の使用に関係していると思います。 'var'変数のスコープと、それがどのように非同期コードに干渉するのかを読んでください。 'var'の代わりに[' let'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let)を使用すると、おそらく解決されます。 – robertklep

答えて

0

は最後に、私はあなたが "なぜ" を求めていないと思います

var a = "100000"; 
var con = mysql.createConnection({ 
       host: "xyz.com", 
       user: "db", 
       password: "db", 
       database: "truck" 
    }); 
for (var i = 0; i < a.length; i++) 
{ 
let p = a.substring(0,1);//p is 1 now 
con.connect(function(err) {         
con.query("SELECT * FROM at_device_fault", function (err, result, fields) { 

      console.log(p);//here p is 1 now 
    }); 
}); 
} 
0

を聞かせて使用してこの問題を解決しました。この関数は、pが未定義で、非同期クエリが最後に完了した後に実行される「コールバック」です。実行が完了するのを待たずに、むしろイベントループに渡して、次の反復に移ります。クエリーの完了後にコールバックが最終的に実行されるときに、pの値がどうなるかはっきりと言うことはできません。この理由から、const変数は値を変更しないので、コールバック内で使用することができます。

関連する問題