2012-12-02 50 views
0

我不太瞭解javascript。我無法定義全局變量。node.js全局變量有問題

var data = 'empty'; 

connection.query('SELECT * FROM deneme',function(err, rows, fields){ 
    if (err) throw err; 
    data = rows; 
}); 

console.log(data); 

通常,控制檯需要返回行的數據,但它返回'空'。我如何從函數內部查詢行?我怎樣才能定義一個全局變量?

+2

這不是全局變量定義的問題,而是試圖以同步的方式來使用異步方法。這是不可能的。我寫了一個比喻,也許它可以幫助你理解它:http://stackoverflow.com/a/11689804/938089 –

回答

1

它不工作的原因是因爲你console.log是在異步代碼塊之外。基本上發生的是這樣的:

  1. data設置爲empty;
  2. connection發出數據庫請求;
  3. console.log火災(dataempty在那一點);
  4. 收到數據庫響應;
  5. 回調火災;
  6. data設置爲rows

因此,爲了得到你想要的東西簡單地把console.log聲明異步塊裏面的代碼:

var data = 'empty'; 

connection.query('SELECT * FROM deneme',function(err, rows, fields){ 
    if (err) throw err; 
    data = rows; 
    console.log(data); 
}); 
+1

好吧,但我將需要使用功能以外的數據,主要問題是這樣的。 – user1870012

+0

如何你會回報價值嗎? –

+0

你不能。這不是你如何做異步編程。 – freakish