program story

Javascript-setInterval에게 x 번만 실행하도록 지시합니까?

inputbox 2020. 12. 27. 10:50
반응형

Javascript-setInterval에게 x 번만 실행하도록 지시합니까?


자바 스크립트에서 setInterval이 실행되는 시간을 제한 할 수 있습니까?


x 호출 clearInterval()후에 호출 할 수 있습니다 .

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

나는 개인적으로 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)

setTimeout 및 for 루프를 사용할 수 있습니다.

var numberOfTimes = 20;
delay = 1000;

for (let i = 0; i < numberOfTimes; i++) {
    setTimeout( doSomething, delay * i);
}

을 호출하는 시간 제한을 설정할 수 있습니다 clearInterval. 이것은 작동합니다.

function setTimedInterval(callback, delay, timeout){
    var id=window.setInterval(callback, delay);
    window.setTimeout(function(){
        window.clearInterval(id);
    }, timeout);
}

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>

NodeJS를 위해이 작업을 수행하는 작은 패키지를 만들었습니다.

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

It's a drop-in replacement for setInterval (including parameter passing), but it takes an additional count parameter. This example prints a message once every second, but only 3 times.

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

const timer = countInterval(() => {
   console.log('fired!', new Date());
}, 1000, 3);

And for those of you preferring setTimeout and loving recursion here is my suggestion ;)

const setIntervalX = (fn, delay, times) => {
  if(!times) return

  setTimeout(() => {
    fn() 
    setIntervalX(fn, delay, times-1)
  }, delay)
}

Then as suggested you can call the new setInvervalX() function as follows:

// This will be repeated every for 5 times with 1 second intervals:
setIntervalX(function () {
    // Your logic here
}, 1000, 5);

ReferenceURL : https://stackoverflow.com/questions/2956966/javascript-telling-setinterval-to-only-fire-x-amount-of-times

반응형