声明的数组返回undefined
在我的项目中,其中一个函数应该用新的统计信息更新用户列表,我有这个function:
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中的日志未定义,但数组已声明。 是什么原因造成的呢?
问题是callback不运行,直到循环完成后,在这一点上, 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); }