声明的数组返回undefined

时间:2014-03-14 17:11:44

标签: node.js

在我的项目中,其中一个函数应该使用新的统计信息更新用户列表,我有这个功能:

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存在未定义的日志,但是声明了数组。造成这种情况的原因是什么?

1 个答案:

答案 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);
}