提问者:小点点

JavaScript/jQuery clearInterval工作,但有延迟


我有一个运行在服务器端的flask-environment,它计算当前位置(连接到服务器上的GPS模块)和给定坐标之间的距离。 我想要一个文本更新时,某个事件发生。 它应该不断更新,直到发生不同的事件。

这是我更新距离的功能:

function getDistToCurPos(lat, lon) {
        $.getJSON('/getDistFromCurPosToPoint', {
        pLat: lat, 
        pLon: lon,
      },
      function(data){
        dist = data;
        let distStr = String(dist);
        let outStr = '<div class="distanceOutput"> Distance: '.concat(distStr).concat("</div>");
        $( "div.distanceOutput" ).replaceWith( outStr );
        });
};

当start-event发生时,我按如下方式调用函数(示例值38和9):

distRefreshID = setInterval(function() { getDistToCurPos(38,9); }, distUpdateTime);

DistupdateTime设置为500。 服务器响应平均需要15毫秒。

文本的初始状态:

<div class="distanceOutput">Inactive !</div>

要终止更新文本,当发生不同的事件时,我调用以下命令:

if ( distRefreshID !== 0) {
   clearInterval(distRefreshID);
   $( "div.distanceOutput" ).replaceWith('<div class="distanceOutput">Inactive again!</div>');
   distRefreshID = 0;
}

一般情况下,代码是有效的。 但当停止事件发生时,我看到“Inactive Again!” 只是短暂的一瞬间。 在此之后,文本会持续更新几秒钟的当前值。

有什么提示吗,我的窃听器在哪?


共1个答案

匿名用户

setInterval最初不调用函数,它在x毫秒后调用它,因此如果您想立即更新内容,请在设置时间间隔之前调用函数

getDistToCurPos(38,9);
distRefreshID = setInterval(function() { getDistToCurPos(38,9); }, distUpdateTime);