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); }); }
问题是你在设置之前引用了全局gData
variables的值。
因为你不声明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在匿名函数内部,所以它是本地函数。