确定。我没有这个问题的代码。我问这个是因为我是javascript的新手。我想知道如何在JS中创建一个定时队列。这是诀窍。
我有一个组合框。组合框后面有extjs数据存储,每隔5秒就会更新一次新数据,即组合将获得新的行条目。
行条目可以是三种类型1,2和3.可以有多个相同类型但具有不同行ID的行。如果5分钟没有更新,则每行将从组合中删除。这意味着如果我从商店获得类型3的新行,它将在组合中保留5分钟。如果在获取的新数据中出现相同的行(具有相同的id和类型),则5分钟计时器将重置并再次计数5分钟。等等。
如何在javascript中实现此功能。
如果不理解,请写评论。
以下是一个例子:
row_1 type1 5 min timer start
row_2 type1 5 min timer start
row_3 type3 5 min timer start
row_2 type2 5 min timer start
这是获取的当前数据的示例。 3分钟后,我得到了这些数据。
row_3 type3 5 min timer start
其余的行计时器继续,直到达到5分钟的限制但是对于第3行,计时器被重置并且它将在接下来的5分钟内保持在组合中。
答案 0 :(得分:3)
你将不得不在这里跟踪两件事:实际项目,以及上次更新的时间(或者更确切地说,是更新它的超时事件。
timeouts = [];
elems = [];
function updateElem(no){
//Do your update on elems[no]
clearTimeout(timeouts[no]);
timeouts[no] = setTimeout(function(){ removeElem(no) }, 5*60*1000 );
}
function removeElem(no){
//Remove the element.
}
这证明了基本概念。有更好的方法可以将所有东西捆绑在一起,但基本的想法是:
因为JS不是真正的多线程,所以只要你确定了你的范围,就不必担心并发问题。
Check this documentation了解超时事件如何更全面地发挥作用。
答案 1 :(得分:1)
其他地方:
function ComboRemoval(id)
{
Lookup your combobox (document.findelementbyid perhaps)
Find element with value "id"
remove it
}
在组合框中添加元素时:
Add the element
setInterval(function() { ComboRemoval(1234)}, 300000); //FIXED AS PER COMMENTS BELOW
setInterval将在5分钟内触发函数ComboRemoval,它将从框中删除ID 1234。
300000 = 5分钟(1000 = 1秒,60 x 5 = 300秒,300 x 1000 = 300000)
答案 2 :(得分:1)
您需要使用调用setTimeout()
的递归函数示例:
function myFunc() {
var minutes = 5;
//do stuff here
setTimeout(function() { myFunc() }, minutes*60000 };
}
当调用时,myFunc()将触发,然后在5分钟计时器上调用自身。其余的程序逻辑100%依赖于最终结果。
答案 3 :(得分:1)
以@ Gherkin的答案为基础,使用jQuery:
function addOption(key, text, timeout) {
var el = $("<option></option>")
.attr("value",key)
.text(text);
$('#test').append(el);
setTimeout(function() { el.remove(); }, timeout);
}
现在你可以致电:
addOption("value", "Text for option", 2000);
查看实际操作:http://jsfiddle.net/um9Cu/
您可以展开addOption()以使用键查找现有项目并延长超时或您需要做的任何事情。
答案 4 :(得分:0)
我通过usign会话解决了这个问题。最新数据是在会话中编写的,因此新请求是根据会话中的数据进行的。我在演唱会上使用了php和js。 Js正在通过php会话阅读