Javascript 当我能够更早地引用数组时,无法引用该数组

Javascript 当我能够更早地引用数组时,无法引用该数组,javascript,arrays,node.js,server,Javascript,Arrays,Node.js,Server,我正在为服务器使用node.js创建一个在线游戏。我有一些玩家的名字,我想在用户登录时分配给他们。播放器名是从JSON文件加载的,加载时我可以记录播放器名,但是当用户登录时我记录播放器名时,它表示未定义。我的代码如下 var-app=require('express')(); var server=require('http')。服务器(应用程序); var io=require('socket.io')(服务器); var fs=要求(“fs”); var playersRequired=3

我正在为服务器使用node.js创建一个在线游戏。我有一些玩家的名字,我想在用户登录时分配给他们。播放器名是从JSON文件加载的,加载时我可以记录播放器名,但是当用户登录时我记录播放器名时,它表示未定义。我的代码如下

var-app=require('express')();
var server=require('http')。服务器(应用程序);
var io=require('socket.io')(服务器);
var fs=要求(“fs”);
var playersRequired=3;
var playersHad=0;
变量playerNames=[];
var=[];
var gameStart=false;
var gameRunning=false;
类播放器{…}
fs.readFile(uu dirname+“/Gamedata/characters.json”,函数(err,data){
log(“加载字符”);
playerNames=JSON.parse(数据);
控制台日志(playerNames);

对于(var i=0;i来说,看起来您的退出时间为1。您在从玩家登录之前正在更新playersHad。玩家的索引为0,您正在使用1、2、3等来跟踪长度

你的代码应该是

socket.on('login',function(data){
 console.log("Player logged in");
 playersHad++;
 console.log(playersHad+" players have logged in");
 //this does not work and returns undefined:
 console.log("This user is: " + players[playersHad - 1]);
 socket.emit("Name",players[playersHad - 1]);
 if(playersHad == playersRequired){
   if(!gameRunning){
     gameRunninng = true;
     game();
   }
 }
});

让我知道这有帮助吗?< /p>你所贴的代码看起来和你描述的问题不相关。加载玩家的代码就在中间。我应该删除不相关的内容吗?我想你有一个范围问题!抱歉,看起来我在查看代码之后编辑了你的代码。你是在这里输入的还是你有?在你的代码

console.log中类似这样(“这个用户是:“+players[playersad”);
你缺少了一些东西:)这不起作用。由于某些原因,我仍然没有定义。虽然似乎还有其他事情发生,但off by 1错误应该像我提供的代码段中那样处理。@seth上面提到可能存在争用条件。请尝试使用fs.readFileSync来避免这种情况。