私はマルチプレイヤーゲーム(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オブジェクトを使用しようとするまで、すべてが正常に機能します。「未定義のプロパティ'スコア'を読み取れません」と表示されます。これは単なるスコーピングの問題ですか?
また、コールバック関数自体に問題があるのではないかと考えていました。おそらく、コールバックが実行される前にループがインクリメントするでしょう。しかし、その場合でも、スコアはそこにあるはずです。それは、間違った配列インデックスから取得しているだけです...それが、スコープの問題である可能性があると私に信じさせます。
どんな助けでも大歓迎です。