在我的项目中,其中一个函数应该使用新的统计信息更新用户列表,我有这个功能:
function gameEnded(team){
//reset variables
playersObject = {};
isPlaying = false;
subQueue = {};
subArray = [];
blueList = ["Jonas","LucasTT"];
redList = ["Lucas","Manelzao"];
//updates database
for(i=0; i<blueList.length; i++){
getPlayerStats(blueList[i], function(oldStats){
console.log(blueList[i]);
setPlayerStats(blueList[i], [oldStats[0]+6,oldStats[1]]);
});
}
}
它应该从列表中获取名称,获取名称的统计信息(使用MySQL),然后更新它。但是,console.log存在未定义的日志,但是声明了数组。造成这种情况的原因是什么?
答案 0 :(得分:1)
问题是回调在该循环完成之后才会运行,此时i
等于blueList.length
,并且在javascript索引中超过数组的结尾返回undefined
。
您希望在循环的每次迭代中冻结i
的值,这可以通过IIFE完成:
for(i=0; i<blueList.length; i++){
(function(i) {
getPlayerStats(blueList[i], function(oldStats){
console.log(blueList[i]);
setPlayerStats(blueList[i], [oldStats[0]+6,oldStats[1]]);
});
})(i);
}