2012-12-02 53 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