Javascript:在所需的时间间隔内执行2个函数

时间:2015-06-24 06:35:34

标签: javascript timer setinterval intervals

我对javascript很新,我试图学习时间事件。我尝试实现一个功能,该功能需要数字并执行{strong>数次的function1,然后执行function2。但是在每次执行之间,我都希望有一个设定的间隔。例如,function1打印" foo"和function2打印" bar"。如果功能的输入数字是" 3" &安培;间隔是5秒,最后的打印应该是foo,foo,foo,bar,foo,foo,foo,bar ....每隔5秒钟。 我已尝试for循环和while循环。

var i=0;
while (i < 4){//number of times to repeat "function"
    if (i%4 == 0){
        setInterval(function(){
            console.log("bar");
        },2000);//interval between functions
    }
    else{
        setInterval(function(){
            console.log("foo");
        },2000);//interval
    }
    i++;
    if (i==4) i = 0;
}

5 个答案:

答案 0 :(得分:2)

你错过了很多事情。

  1. setInterval“设置”将来某个时间执行的异步任务(代码中为2000ms)。调用完成后,执行立即继续到下一行。此外,如果您希望任务只运行一次,则应使用setTimeoutsetInterval导致任务以无限的“循环”执行(至少直到clearInterval被调用)。
  2. 您的while条件是多余的。因为你在while块中重置它(在最后if中),我永远不会等于或高于4。这似乎是故意的,但是根本没有理由(使用while(true)
  3. 做你想做的事的解决方案可能是:

    var maxPrints = 20; // Otherwise this will never end...
    
    function nextInterval(i) {
      console.log(i == 0 ? 'bar' : 'foo');
      if(--maxPrints > 0)
        setTimeout(function() { nextInterval((i + 1) % 4); }, 2000);
    }
    nextInterval(0);

    或者您只需拨打一次setInterval即可完成此操作:

    var maxPrints = 20; // Otherwise this will never end...
    var i = 0, interval;
    
    function nextInterval() {
      console.log((i++ % 4) == 0 ? 'bar' : 'foo');
      if(--maxPrints <= 0)
        clearInterval(interval);
    }
    interval = setInterval(nextInterval, 2000);

答案 1 :(得分:1)

我接近这个的方法是制作一个按顺序调用的函数运行列表:

&#13;
&#13;
var fns = Array.apply(null, new Array(3)).map(function() { 
    return foo; 
}).concat([bar]);
&#13;
&#13;
&#13;

填充该数组相对容易:

 expListView.setOnChildClickListener(new OnChildClickListener() {

    @Override
    public boolean onChildClick(ExpandableListView parent, View v,
            int groupPosition, int childPosition, long id) {


        Log.e("child", (listDataHeader.get(groupPosition)).get(childPosition));

        return false;
    }
});

答案 2 :(得分:0)

function fooBar(foo,delay){
    var i=1;
    setInterval(function(){
        if (i%(foo+1) ==0){
            console.log("BAR");
        }
        else {
            console.log("foo");
        }
        i++;
        //set i back to 0. not necessary, though
        if (i==(foo+1)){
            i=0;
        } 
    },delay);
}
fooBar(3,1000);//number of "foo"s , delay in ms

答案 3 :(得分:0)

尝试

var i = 0,
  num = 3,
  interval = setInterval(function() {
    if (i < num) {
      console.log('foo')
    } else {
      console.log('bar')
    }

    if (i++ == num) {
      i = 0;
    }
  }, 500);

答案 4 :(得分:0)

而不是setinterval到两个函数,setinterval代替一个有条件地调用两个函数的函数。