2011-10-12 30 views
17

Ho le seguenti funzioni: JSJS setInterval eseguito solo una volta

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);  

     }); 
    }); 
} 

Perché setInterval esegue checkIfGameAlreadyStarted solo una volta, e non ogni secondo?

risposta

56

Si sta passando il risultato dell'esecuzione della funzione anziché della funzione stessa. Poiché il risultato della funzione non è definito, si sta eseguendo checkIfGameAlreadyStarted e quindi si passa undefined a setInterval che non fa nulla.

Invece di questo:

setInterval(checkIfGameAlreadyStarted(), 1000); 

La sua dichiarazione dovrebbe essere questo:

setInterval(checkIfGameAlreadyStarted, 1000); 

senza le parentesi alla fine del nome della funzione.

Quando si passa checkIfGameAlreadyStarted() che chiama immediatamente la funzione e ottiene il suo valore di ritorno. Quando si passa checkIfGameAlreadyStarted che passa un riferimento alla funzione in modo che setInterval possa chiamarlo in seguito (che è ciò che si desidera).

Problemi correlati