2011-06-08 150 views
1

如何将匿名函数内的值赋给全局变量或其范围外的变量。例如,下面的例子。 console.log(rows)返回正确的数据,而console.log(result)返回未定义匿名函数范围混淆

var result; 
this.query(sql).execute(function(error, rows) { 
    console.log(rows) 
    result = rows; 
}); 
console.log(result); 

回答

8

Node.js的是事件驱动的,这意味着大部分功能是异步的。 execute函数不会返回任何值,因为“返回”值位于声明为第一个参数的匿名函数中,只有在查询已执行并且数据库已返回值时才会调用该函数。所以你的result变量不包含任何值,因为没有什么可返回的。

** 编辑 **

即使你的编辑,分配rows被执行之前,你登录的变量result行,因为匿名函数只执行,当查询完成时。

+0

更改了示例代码,我复制了不正确的代码。同样的结果。 – HyderA 2011-06-08 02:56:59

+0

它不会改变任何东西。 'result'将不会保留任何值,只是因为匿名函数*异步*执行,意思是*稍后* – 2011-06-08 02:59:06

+0

啊,是的,这是有道理的! – HyderA 2011-06-08 03:01:26

0

.execute返回什么?它可能只是处理由.query返回的项目而不返回数组