javascript - 为什么使用 setInterval 时似乎将两个值设置为单个变量?

标签 javascript jquery node.js

我有这段代码,用于监听套接字发出的信号,然后每 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。当再次调用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);
});

关于javascript - 为什么使用 setInterval 时似乎将两个值设置为单个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359574/

相关文章:

javascript - 如何解决MomentJS和Asp.net Core之间的时差

javascript - if 语句内的两个条件 (jQuery)

php - 如何将 ajax post 包含到 get 表单中并在 get url 中排除 ajax 使用的输入?拉维尔

node.js - 如何将 RxJs observable 的结果作为 Node.js 的剩余响应返回

javascript - 打印一个字符串会返回一个错误,但首先用 JSON 将其字符串化,不会

javascript - jquery - 为文本字段 "changing"建立事件? (按键工作,但没有退格事件)

javascript - 让 jquery 标签插件在 IE 中工作

javascript - FullCalendar .start 没有正确获得小时

javascript - 处理 Ajax 请求的响应

javascript - 如何用 Jest 模拟 fs.readFileSync