我有问题。日志说变量" 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);
});
}
答案 0 :(得分:2)
问题是您在设置之前引用了全局gData
变量的值。
由于您未声明gData
,因此在执行gData = count;
之前无法评估其值。并且因为该行在异步groupModel.count(...)
回调中执行,所以console.log(...)
行在此之前执行。
如果您在回调中移动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);
});
答案 1 :(得分:1)
gData变量位于匿名函数内..因此它是该函数的本地变量。