我有这段代码,侦听套接字发出的消息,然后每5秒启动一次间隔循环。间隔使用jquery将页面上的文本更改为从套接字发射拉出的值。
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秒将两个不同的值记录到控制台。
最佳答案
setInterval
创建一个新的间隔,该间隔每5秒执行一次。再次调用delayTime
时,旧间隔保持存在。您可能要在创建新间隔之前删除第一个间隔:
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);
});