gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:45:20 24 4
gpt4 key购买 nike

我有一个问题。日志显示变量“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 变量的值。

因为您没有声明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);
});

关于node.js - 全局变量不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20386270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com