Javascript - сказать setInterval, чтобы только запустить x количество раз? - PullRequest
51 голосов
/ 02 июня 2010

Можно ли ограничить количество срабатываний setInterval в JavaScript?

Ответы [ 6 ]

132 голосов
/ 02 июня 2010

Вы можете позвонить clearInterval() после x вызовов:

var x = 0;
var intervalID = setInterval(function () {

   // Your logic here

   if (++x === 5) {
       window.clearInterval(intervalID);
   }
}, 1000);

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

function setIntervalX(callback, delay, repetitions) {
    var x = 0;
    var intervalID = window.setInterval(function () {

       callback();

       if (++x === repetitions) {
           window.clearInterval(intervalID);
       }
    }, delay);
}

Затем вы можете вызвать новую функцию setInvervalX() следующим образом:

// This will be repeated every for 5 times with 1 second intervals:
setIntervalX(function () {
    // Your logic here
}, 1000, 5);
3 голосов
/ 02 июня 2010

Вы можете установить тайм-аут, который вызывает clearInterval. Это должно работать:

function setTimedInterval(callback, delay, timeout){
    var id=window.setInterval(callback, delay);
    window.setTimeout(function(){
        window.clearInterval(id);
    }, timeout);
}
2 голосов
/ 03 августа 2018

Вы можете использовать setTimeout и цикл for.

var numberOfTimes = 20;
delay = 1000;

for (let i = 0; i < numberOfTimes; i++) {
    setTimeout( doSomething, delay * i);
}
2 голосов
/ 09 марта 2017

Лично я предпочитаю использовать setTimeout() с интервалом для достижения того же эффекта

// Set a function to run every "interval" seconds a total of "x" times
var x = 10;
var interval = 1000;

for (var i = 0; i < x; i++) {
    setTimeout(function () {
        // Do Something
    }, i * interval)
}

Нет необходимости в очистке с clearInterval()

Вы можете заключить его во избежание утечки переменных, и это выглядит довольно чисто:)

// Definition
function setIntervalLimited(callback, interval, x) {

    for (var i = 0; i < x; i++) {
        setTimeout(callback, i * interval);
    }

}

// Usage
setIntervalLimited(function() {
    console.log('hit');          // => hit...hit...etc (every second, stops after 10)
}, 1000, 10)
1 голос
/ 02 июня 2010

Это очистит интервал после 10 вызовов

<html>
<body>

<input type="text" id="clock" />
<script language=javascript>
var numOfCalls = 0;
var int=self.setInterval("clock()",1000);
function clock()
  {
  var d=new Date();
  var t=d.toLocaleTimeString();
  document.getElementById("clock").value=t;
  numOfCalls++;
  if(numOfCalls == 10)
     window.clearInterval(int);
  }
</script>
</form>


</body>
</html>
0 голосов
/ 03 мая 2019

Я сделал небольшой пакет, который делает это для NodeJS.

https://www.npmjs.com/package/count-interval

Это замещающая замена для setInterval (включая передачу параметров), но она требует дополнительного параметра count В этом примере сообщение печатается один раз в секунду, но только 3 раза.

const countInterval = require('./countInterval');

const timer = countInterval(() => {
   console.log('fired!', new Date());
}, 1000, 3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...