node.js - 全局变量不起作用?

时间:2013-12-04 21:23:07

标签: node.js mongoose

我有问题。日志说变量" 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);
        });
}

2 个答案:

答案 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变量位于匿名函数内..因此它是该函数的本地变量。