javascript - javascript/jquery clearInterval 有效但有延迟
问题描述
我有一个运行服务器端的烧瓶环境,它计算它的当前位置(连接到服务器的 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 );
});
};
当开始事件发生时,我按如下方式调用函数(示例值 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;
}
该代码通常有效。但是当停止事件发生时,我看到“再次无效!” 只是片刻。之后,文本会持续更新几秒钟的当前值。
任何提示,我的错误在哪里?
解决方案
setInterval 最初不会调用该函数,它会调用它after
x 毫秒,因此如果您想立即更新内容,请在设置间隔之前调用该函数
getDistToCurPos(38,9);
distRefreshID = setInterval(function() { getDistToCurPos(38,9); }, distUpdateTime);
推荐阅读
- spring-boot - 如何检测在反序列化我的响应时使用了哪个对象映射器?
- blazor - 如何在 BlazorStrap 中做子菜单?
- floating-point - 为什么浮点数每数百都不一样?
- android - 单元测试协程通道返回
- sql - 第三列以前两列为条件(SQL)
- angular - 如何使用 Angular flex-layout 创建左对齐网格,但让整个网格在屏幕上居中?
- python - 多个集合的唯一元素
- javascript - 如何在重复的函数上运行 Promise?
- rust - 我在我的 Rust 程序中不断收到 ParseIntError { kind: InvalidDigit },我不知道为什么
- acumatica - 既然 GIScreenHelper 被标记为过时,我如何重定向到仪表板?