2011-10-12 29 views
17

tôi có các chức năng JS sau:JS setInterval thực hiện một lần duy nhất

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

     }); 
    }); 
} 

Tại sao setInterval thực hiện checkIfGameAlreadyStarted chỉ một lần, và không phải mọi thứ hai?

Trả lời

56

Bạn đang chuyển kết quả thực thi hàm thay vì chính hàm đó. Vì kết quả của hàm không được xác định, bạn đang thực thi checkIfGameAlreadyStarted và sau đó chuyển undefined thành setInterval mà không làm gì cả.

Thay vì điều này:

setInterval(checkIfGameAlreadyStarted(), 1000); 

tuyên bố của bạn nên được này:

setInterval(checkIfGameAlreadyStarted, 1000); 

mà không có dấu ngoặc đơn ở phần cuối của tên hàm.

Khi bạn vượt qua checkIfGameAlreadyStarted() gọi hàm ngay lập tức và nhận giá trị trả về của nó. Khi bạn vượt qua checkIfGameAlreadyStarted để chuyển tham chiếu đến hàm, do đó, setInterval có thể gọi nó sau này (đó là những gì bạn muốn).

Các vấn đề liên quan