2017-06-04 42 views
0

我有這個代碼偵聽一個套接字發射,然後每隔5秒開始一個間隔循環。間隔使用jquery將頁面上的文本更改爲從套接字發出的值。爲什麼在使用setInterval時,似乎有兩個值被設置爲單個變量?

socket.on("activeBid", function(data) { 
     $('#noActiveBid').hide(); 
     $('#activeBid1').hide(); 
     $('#activeBid').show(); 
     $('#activeBidValue').text(data.activeBid); 
     setInterval(delayTime, 5000); 
     function delayTime() { 
      $('#ago2').text(moment(data.bidTime).fromNow()); 
     } 
    }); 

的代碼被執行每5秒和一切正常,直到我發出另一個插座事件,造成新的數據值(data.bidTime)發送過來。舊的bidTime值停留在時間間隔內,並且新的bidTime值也正在增加,因此頁面上的文本每隔5秒在兩個值之間更改一次。爲什麼是這樣?

當我console.log data.bidTime值,然後導致另一個發射導致另一個值被髮送,我得到兩個不同的值每隔5秒記錄到控制檯。

回答

7

setInterval創建一個新的時間間隔,每隔5秒執行一次delayTime。再次撥打activeBid時,舊時間間隔保持不變。您可能希望創建一個新的前除去第一區間:

var interval; 
socket.on("activeBid", function(data) { 
    clearInterval(interval); 

    $('#noActiveBid').hide(); 
    $('#activeBid1').hide(); 
    $('#activeBid').show(); 
    $('#activeBidValue').text(data.activeBid); 

    function delayTime() { 
     $('#ago2').text(moment(data.bidTime).fromNow()); 
    } 

    interval = setInterval(delayTime, 5000); 
}); 
+3

這將是很好,如果你可以更新你的答案來說明如何清除的間隔。 – Soviut

相關問題