node.js – 全局variables不工作?

我有个问题。 日志说variables“gData”没有定义。 但在我看来,它一定是因为它的全球性? 你能帮忙吗?

function refreshGroupData(){ groupModel.count(function(err, count){ gData = count; io.sockets.emit( 'sendGroupData', gData); }); console.log ('Test: ' + gData); } 

谢谢你,罗伯特

编辑:

 function refreshGroupData(){ function test(callback){ groupModel.count(function(err, count){ callback(count) }); } test(function(count) { io.sockets.emit( 'sendGroupData', count); console.log('Test: ' + count); }); } 

问题是你在设置之前引用了全局gDatavariables的值。

因为你不声明gData ,所以直到gData = count;才能评估它的值gData = count; 被执行。 由于该行是在asynchronous的groupModel.count(...)callback中执行的,因此在执行console.log(...)行之前执行该行。

如果您在callback中移动console.log调用,它将起作用。

 function refreshGroupData() { groupModel.count(function(err, count) { gData = count; io.sockets.emit('sendGroupData', gData); console.log('Test: ' + gData); }); } 

做这种事的正确方法是这样的:

 function refreshGroupData(callback) { groupModel.count(function(err, count) { io.sockets.emit('sendGroupData', count); callback(count); }); } // Calling the function and logging the result. refreshGroupData(function(count) { console.log('Test: ' + count); }); 

gDatavariables在匿名函数内部,所以它是本地函数。