我怎样才能让我的函数无限重复工作
how can I let my function work repeatedly infinitely
这是我的伪代码
var list = {
a:[
{content: 'a', time: 5},
{content: 'b', time:2},
{content: 'c', time:3}]
}
var insert_and_stop = function(content, time){
//let content insert to somewhere and wait for "time" second
}
我的要求是运行一个循环以在数据集(列表)上插入一些(内容,时间)
并重新开始到列表
的顶部显然,我可以使用for
在列表
上运行我的函数
但我不知道如何重新开始?
抱歉代码不完整
更新!!!
我现在的解决方案是:
for(var i = 0; i<list.a.length; i++){
(function(i){
setTimeout(insert(list.a[i].content), list.a[i].time * 1000);
})(i);
}
它有效,但如果我让while(true)
包含此代码
,我就不行浏览器将崩溃,因为for...
部分将重复
运行
我认为pid
在他的回答中的意思是你应该使用:setInterval(function, delay)
其中function
是函数名称,delay
是调用之间的延迟(以毫秒为单位)。
使用您的代码作为参考和查询,以下是我的方法:
var list = {
a:[
{content: 'a', time: 5},
{content: 'b', time:2},
{content: 'c', time:3}]
}
var i = 0;
var insertContent = function(){
// Do something with the content
console.log(list.a[i].content);
// Either increment the i or restart at 0.
if((list.a.length - 1) > i ){
i++;
}else{
i = 0;
}
setTimeout(function(){
// Run the function again
insertContent();
}, list.a[i].time * 1000);
}
此代码将循环到数组的末尾,然后再次启动。
我已经在我这边测试了它并且似乎正在工作,但是我确实重命名了该功能,因此请根据您的要求进行调整。
这里的两个选项是 setInterval(function, delay)
和 setTimeout(function, delay)
。主要区别在于,setInterval
将恰好在每个delay
时间段触发,而setTimeout
只会在内部代码运行时触发。在实践中,如果代码的运行时间比预期的要长,您必须注意副作用(这会导致setInterval
多次将代码堆叠在自身之上)。
例子:
function myTimeoutFunc(){
// .. some code
setTimeout(myFunc, delay-in-milliseconds);
}
myFunc();
function myIntervalFunc(){
// .. some code
}
setInterval(myIntervalFunc, delay-in-milliseconds);
使用 setInterval(<function-name>, <delay-in-milliseconds>)
其中 <function-name>
是函数名称或 lambda(如果您知道这是什么),<delay-in-milliseconds>
是调用之间的延迟(以毫秒为单位)。
否则,如果您确实需要在insert_and_stop()
内部执行此操作,则可以执行以下操作。编写一个实际的函数(这意味着您只需要 1 个出口点)。然后,就在退出函数之前:
setTimeout(function () { insert_and_stop(content, time); }, time);
您需要 lambda(包装函数),因为参数content
和time
需要正确传递才能进行后续调用。
请注意,这不会每 <time>
毫秒调用一次函数,因为函数本身的执行时间不会被考虑在内。如果insert_and_stop()
花费的时间与<time>
相似,则此效果可能会变得合理。否则,如果函数很快(微秒)并且间隔很高(100 或 1000 倍长),那么根据您的实际操作,开销可能可以忽略不计。
//set my function each 3seconds
var interval = setInterval("myFunction", 3000);
//or
var interval = setInterval(function(){
alert("I am myFunction");
}, 3000);
//release
releaseInterval(interval);
这是需要释放的重要"setInterval"返回值!
- 从index.html调用函数,该函数无限循环
- 对视图上函数的角度绑定导致对数据服务的无限调用
- 使用jQuery在具有相同名称函数的对象上触发事件时的无限循环
- AngularJS内部的调用函数进入无限循环
- 在绑定到内部$http函数时运行无限摘要循环
- 在 JavaScript 函数中使用无限参数
- 使用 for 循环中的函数测试字符串时,我一直陷入无限循环
- 函数无限循环并忽略其他函数的某些部分
- Angularjs 指令,函数双向绑定陷入无限循环
- 为什么这个函数不能无限循环
- Javascript 函数有时会将自身循环成无限循环
- scrollTop() 函数无限循环
- ng-禁用函数调用在 ng-repeat 下处于无限循环中
- 如何从无限循环的Javascript函数将值传递给MySQL
- 如何修改/覆盖由无限 setInterval 调用的 javascript 函数
- 我怎样才能让我的函数无限重复工作
- 通过javascript的无限函数
- CodeMirror在实现变更函数时进入无限循环
- 如何在不创建无限循环的情况下从事件处理程序中激发事件触发函数
- 无限函数调用