2011-10-12 18 views
17

que tiene las siguientes funciones: JSJS setInterval ejecuta sólo una vez

function checkIfGameAlreadyStarted(){ 
    $.get("IsGameAlreadyStarted",null,function(gameAlreadyStarted){ 
     if (gameAlreadyStarted == "true"){ 
      window.location = "index.jsp?content=game";  
     } else{ 
      alert("bla"); 
     } 
    }); 
} 

function joinGame(playerForm){ 
    $.get("GenerateClientID",null,function(clientID){   
     $.get("JoinGame",{ 
      "NAME" : playerForm.elements[0].value, 
      "ID" : clientID 
     } 
     ,function(gameParam){ 

      $("#waitingContainer").append("You have joined the game!<br\>Waiting for game creator to start game.."); 
      setInterval(checkIfGameAlreadyStarted(), 1000);  

     }); 
    }); 
} 

¿Por qué setInterval ejecuta checkIfGameAlreadyStarted sólo una vez, y no cada segundo?

Respuesta

56

Está pasando el resultado de la ejecución de la función en lugar de la función misma. Como el resultado de la función no está definido, está ejecutando checkIfGameAlreadyStarted y pasando undefined a setInterval que no hace nada.

lugar de esto:

setInterval(checkIfGameAlreadyStarted(), 1000); 

Su declaración debe ser la siguiente:

setInterval(checkIfGameAlreadyStarted, 1000); 

sin los paréntesis al final del nombre de la función.

Cuando pasa checkIfGameAlreadyStarted() que llama a la función inmediatamente y obtiene su valor de retorno. Cuando pasa checkIfGameAlreadyStarted que pasa una referencia a la función, setInterval puede llamarlo más tarde (que es lo que quiere).

Cuestiones relacionadas