我怎样才能让我的函数无限重复工作

how can I let my function work repeatedly infinitely

本文关键字:无限 函数 工作 我的      更新时间:2023-09-26

这是我的伪代码

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(包装函数),因为参数contenttime需要正确传递才能进行后续调用。

请注意,这不会每 <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"返回值!