多个javascript超时-实时数据获取的问题
Multiple javascript timeouts - problem with live data fetching
我正在构建一个实时系统(使用websockets)更新不同频率的实时数据表(可以每秒3次,可以每2秒一次-取决于数据的类型)。我目前正在努力找到一种方法,让用户知道当一个特定的字段没有在过去的5秒更新。也就是说,如果没有获取新数据,我不应该保留旧值,而是将其更改为'——'或类似的东西。
经过长时间的javascript,最后一个更新字段的函数看起来像这样(非常简化):
function changeValue(data){
var fieldId= data.fieldId;
var value = Math.round(data.value);
$('span#'+fieldId).text(value);
}
每次需要更改字段时调用该函数。我有2到40个不同的字段(取决于用户)被更改。
设置计时器的最佳方法是什么,以便在没有更新的情况下,每5秒将字段的值更改为"——"?
如果你能给我一些建议,我会很感激的。谢谢,卡罗尔。由于您希望在每个字段的基础上指示超时,因此您有两个明显的选项:
- 有一个全局间隔计时器,滴答相当频繁,通过查看所有字段的超时。
- 为每个字段设置独立计时器,仅处理该字段。
我认为总的来说,我更喜欢(1)而不是(2),因为我们只处理一个间隔计时器,它使内务管理更简单。
由于文档中的ID必须是唯一的,我们可以使用您的字段ID值作为散列(对象)中的键来存储最近更新的时间。这是对前一个答案的一种旋转,但在每个字段的基础上工作。下面是我们设置最后更新时间的方法:
var lastUpdatedTimes = {};
function changeValue(data){
var fieldId= data.fieldId;
var value = Math.round(data.value);
$('span#'+fieldId).text(value);
lastUpdatedTimes[fieldId] = new Date().getTime();
}
然后你设置一个间隔计时器来检查每一个。
function checkFieldsForTimeout(){
var now = new Date.getTime();
// For each ID in lastUpdatedTimes, see if 'now minus
// last updated' is > 5000 and is so, set the field
// text to '--' and remove that entry from the last
// updated list with "delete lastUpdatedTimes[itemId]".
}
如果超时字段恢复,"——"将再次被一些真实的文本所取代。
每当我们将"——"放入字段时,通过从"lastUpdatedTimes"中删除最后更新的时间,我们可以确保间隔计时器不会浪费时间处理已经超时的字段。
这个回答在@Andrew的评论之后被扩展到处理多个字段(请参阅他的回答)。
在每个数据中引入属性updatedTime
,它保存数据的最后更新时间。周期性计时器检查updatedTime
中的所有数据,并在适当的情况下更新文本字段。检查的频率必须是检测周期的两倍。您的函数changeValue()
更新了updatedTime
和文本字段。
function checkData() {
var now = new Date.getTime();
for "each data" {
if (now - data.updatedTime >= 5000) {
var fieldId = data.fieldId;
$('span#'+fieldId).text('--');
}
}
}
function changeValue(data) {
var fieldId = data.fieldId;
var value = Math.round(data.value);
$('span#'+fieldId).text(value);
data.updatedTime = new Date.getTime();
}
// Install periodic timer to check last updates:
setInterval(checkData, 5000 / 2); // interval = half the required detection period
- 使用jquery将mysql数据获取到新的表行中
- 使用createContainer将Meteor数据获取到React Native中时出现问题
- 创建按钮,根据表单字段中的数据获取特定的URL
- 在javascript中使用json数据导致问题
- 将JSON API数据获取到html
- 将json数据获取到数组中
- jQuery-数据提取问题(html遍历)
- 嵌套异步函数未及时返回数据的问题
- 如何将具有多个标签的多个的所有数据获取到一个数组中
- 随机数生成器,what'我的方法/统计数据有问题吗?[JS]
- 将状态的 URL 数据获取到模板中
- 如何在jquery中将xml解析数据获取为全局变量
- 在没有JQuery的情况下将JSON数据获取到TVML项目中
- Javascript 获取 JSON 数据的问题
- Json数据获取值问题
- 从模板文件内的数据库获取数据有问题
- 使用$get()获取外部模板数据的问题
- 多个javascript超时-实时数据获取的问题
- 通过ajax从mysqldb获取数据的问题
- 我正在尝试从mysql向node.js获取数据,问题就在这里