2014-04-17 5 views
0
//Server Functions 
var socketArray = []; 
var socketRcon = []; 
for (var i = 0; i < serversConfig.serversArray.length; i++) { 
    socketArray[i] = new Socket; 
    socketArray[i].setEncoding("utf8"); 
    socketArray[i].setNoDelay(); 
    socketArray[i].setTimeout(1000); 
    socketArray[i].connect(serversConfig.serversArray[i].port, serversConfig.serversArray[i].ip); 
    socketRcon[i] = serversConfig.serversArray[i].rcon; 
    socketArray[i].on("connect", function() { 
     this.write(socketRcon[i] + "\n", "utf8"); 
     console.log("CONNECTED TO THE SERVER..."); 
    }); 
    socketArray[i].on("data", function(data) { 
     console.log(data); 
    }); 
    socketArray[i].on("error", function(err) { 
     console.log("ERROR:" + err); 
    }); 

    socketArray[i].on("close", function(err) { 
     console.log("CLOSED:" + err); 
    }); 
}; 

이것은 구성 파일에서 여러 서버에 연결하는 코드이며, 소켓이 연결될 때마다 암호를 보내야합니다. 그러나 'socketRcon [i]'는 정의되지 않았습니다. 왜 그런 일이 일어나고 어떻게 수정합니까?var가 for 루프 내에서 정의되지 않았습니다.

답변

2

코드가 실행될 때까지 iserversConfig.serversArray.length과 같으므로 socketRcon[i]은 정의되지 않습니다.

앵커 사용자 입력 값 :

for(var i=0; i<l; i++) (function(i) { 
    // do stuff here 
})(i); 
+0

나는 시도했다 : http://pastebin.com/LBkBRY5g,하지만 분명히 루프는 실행되지 않았다. –

+0

http://jslinterrors.com/dont-make-functions-within-a-loop/에서 루프에서 즉시 호출 된 함수 식 (IIFE)을 사용하는 이유와 제 의견으로는 더 읽기 쉬운 옵션을 참조하십시오 . – DaveParsons

1

은 또한 단지 할 수있는 :

serversConfig.serversArray.forEach(function(srvconfig) { 
    var sock = new Socket(); 
    sock.setEncoding("utf8"); 
    sock.setNoDelay(); 
    sock.setTimeout(1000); 

    socketArray.push(sock); 
    socketRcon.push(srvconfig.rcon); 

    sock.on("connect", function() { 
    this.write(srvconfig.rcon + "\n", "utf8"); 
    console.log("CONNECTED TO THE SERVER..."); 
    }); 
    sock.on("data", function(data) { 
    console.log(data); 
    }); 
    sock.on("error", function(err) { 
    console.log("ERROR:" + err); 
    }); 
    sock.on("close", function(err) { 
    console.log("CLOSED:" + err); 
    }); 

    sock.connect(srvconfig.port, srvconfig.ip); 
}); 
관련 문제