我有这段代码,侦听套接字发出的消息,然后每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);
});

08-08 05:52