Javascript - 正确顺序的几个间隔

时间:2017-05-21 19:19:52

标签: javascript setinterval

在我的代码中,我有三个间隔,应该一个接一个地随机执行。

    var times =  Math.floor((Math.random() * 3) + 2);
    var turn = 0;
    var schemaInterval1 = setInterval(function(){
        console.log('first');
        turn++;
        if(turn == times)
        {   
            times =  Math.floor((Math.random() * 3) + 2);
            turn = 0;
            clearInterval(schemaInterval1);
        }
    },1000);
    var schemaInterval2 = setInterval(function(){
        console.log('second');
        turn++;
        if(turn == times)
        {   
            times =  Math.floor((Math.random() * 3) + 2);
            turn = 0;
            clearInterval(schemaInterval2);
        }
    },1000);
        var schemaInterval3 = setInterval(function(){
        console.log('third');
        turn++;
        if(turn == times)
        {   
            times =  Math.floor((Math.random() * 3) + 2);
            turn = 0;
            clearInterval(schemaInterval3);
        }
    },1000);    

在间隔内每次执行代码后,我将1添加到转弯值。当转弯和时间值相等时,我重置它们。保留当前工作间隔并跳到另一个间隔。但不幸的是,它们的工作顺序不正确,在我的控制台中我得到了这样的信息:

 first
 second
 third
 first
 second
 first
 (4)second

如何重写我的代码以使这些间隔按正确顺序排列,并且在第一次完成任务之前不允许其他人工作?

1 个答案:

答案 0 :(得分:0)

您可以同时开始所有间隔。如果要连续运行它们,则必须在清除上一个时启动它们。 此代码应该可以满足您的需求:



var times =  Math.floor((Math.random() * 3) + 2);
var turn = 0;
var intervalNumber = 1;
var intervalTime = 1000;
var numberOfIntervals = 3;
function instantiateInterval() {
  if (intervalNumber <= numberOfIntervals) {
    console.log('Timer number: ' + intervalNumber);
    var interval = setInterval(function() {
      turn++;
      if(turn === times) {   
        times =  Math.floor((Math.random() * 3) + 2);
        turn = 0;
        clearInterval(interval);
        instantiateInterval();
      }
    }, intervalTime);
    intervalNumber++;
  }
}
instantiateInterval();
&#13;
&#13;
&#13;