2016-08-04 4 views
1

У меня есть код, подобный этому:SetTimeout внутри setInterval

var count = 0; 

setInterval(function() { 
    if(count===0){ 
    console.log(123); 
    count++; 
    } else if(count>0) { 
    for(i=1;i<=2;i++){ 
     (function(ind) { 
      setTimeout(function() { 
       console.log(ind); 
      }, 1000 * ind); 
     })(i); 
    } 
    count=0; 
    } 
},1000) 

Результат не то, что я ожидал, что я хотел бы достичь в лог консоли, как:

123 
1 
2 
123 
1 
2 
... 

и т. д. для каждого интервала с 1000 мс. Также я хотел бы спросить, есть ли лучший способ сделать это? Число циклов setTimeout (2 для вышеуказанного случая) может/быть различным каждый раз.

+0

* «... и т. Д. Для каждого интервала с 1000 мс ...» * Ваш внутренний 'setTimeout' будет иногда длиннее 1000 мс. Что тогда? –

+0

что-то вроде этого, сначала напечатайте 123 и дождитесь 1000 мс, затем 1 и дождитесь 1000 мс, наконец, 2 и подождите 1000 мс, после чего повторите весь процесс бесконечно –

+0

@TJCrowder да, я повторяюсь 123 –

ответ

1

что-то вроде этого, первая печать 123 и ждать 1000 мс, затем 1 и ждать 1000 мс, наконец, 2 и ждать 1000 мс после этого повторить весь процесс бесконечно

Если вы хотите регулярно в интервалы 1000мса, с внутренним отсчет затем сбросить, вы можете просто использовать один setInterval:

// Uses a 100ms rather than 1000ms counter, stopping after two seconds 
 
var count = 0; 
 
var inner = 0; 
 
var handle = setInterval(function() { 
 
    if (inner == 0) { 
 
    // Start again 
 
    console.log(123); 
 
    count = 0; 
 
    // The number of "inner" counts to do 
 
    inner = 2; 
 
    } else { 
 
    // An "inner" count 
 
    ++count; 
 
    --inner; 
 
    console.log(count); 
 
    } 
 
}, 100); 
 

 
// Stop it after two seconds, just for demo purposes 
 
setTimeout(function() { 
 
    clearInterval(handle); 
 
}, 2000);

Смежные вопросы