2015-06-24 53 views
0

我对javascript很陌生,我正在尝试学习时间事件。我试图实现一个函数,它需要号码并执行function1那个号码的次数,然后执行function2。但是在每次执行之间,我想设置一个间隔。例如,function1打印“foo”和function2打印“bar”。如果功能的输入号码为“3”&间隔为5秒,则最终打印应为foo,foo,foo,bar,foo,foo,foo,bar ....,每隔5秒。 我试过for循环和while循环。Javascript:在所需的时间间隔内排除2个函数

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; 
} 

回答

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 
2

有你错过了许多东西。

  1. setInterval“设置”将在将来某个时间执行的异步任务(在您的代码中为2000ms)。通话结束后,立即执行下一行。另外,如果您希望任务只运行一次,则应使用setTimeoutsetInterval导致任务在无尽的“循环”中执行(至少直到调用clearInterval)。
  2. 您的while条件是多余的。我将永远不会等于或高于4,因为您在while块中重置它(在最后的if中)。这似乎是故意的,但后来就没有理由让所有的条件(使用while(true)

一个解决方案,你想可能是什么:

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);

+0

感谢您的指点。该解决方案,但是,不起作用。 –

+0

我知道。固定... – Amit

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);

1

的方式,我会处理这是使功能的运行列表,以拨打:

function loopFunctions(functions, delay) 
 
{ 
 
    var i = 0; 
 

 
    return setInterval(function() { 
 
     // call current function 
 
     functions[i](); 
 
     // advance pointer and loop if necessary 
 
     i = (i + 1) % functions.length; 
 
    }, delay); 
 
} 
 

 
var foo = function() { console.log('foo'); }; 
 
var bar = function() { console.log('bar'); }; 
 

 
loopFunctions([foo, foo, foo, bar], 2000);

这是比较容易填充该数组:

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

而不是setInterval的两个功能,setInterval的一个函数,有条件调用两个功能。

+0

添加代码到您的答案 –

相关问题