我正在编写一个多人游戏(mongojs,nodejs)并试图弄清楚如何根据游戏结果更新用户统计数据。我已经编写了用于计算所有赛后统计数据的代码。当我尝试在 for 循环中更新用户的统计信息时,问题就来了。这是我得到的:
//Game Stats
var tempgame = {
gameid: 1234,
stats: [
{
score: 25,
user: 'user1'
},
{
score: 25,
user: 'user2'
}
]
}
for(i = 0; i < tempgame.stats.length; i++){
db.users.find({ username: tempgame.stats[i].user }, function(err, res){
if( err != null){
//handle errors here.
} else {
var userstats = res[0].stats;
if( tempgame.stats[i].score > userstats.bestscore ){ //this is where it chokes
userstats.bestscore = tempgame.stats[i].score;
}
//code here to pass back new manipulated stats
}
});
}
一切正常,直到我尝试在回调函数中使用 tempgame 对象。它说“无法读取未定义的属性'分数'”。这只是一个范围问题吗?
另外我认为这可能是回调函数本身的问题。也许循环会在回调运行之前增加。但即使在那种情况下,分数也应该在那里,它只是从错误的数组索引中提取出来的......这就是让我相信它可能只是一个范围问题的原因。
任何帮助将不胜感激。