programing

자바스크립트 함수를 매 분마다 실행하고 최대 3번 실행하기를 원합니다.

sourcejob 2023. 8. 22. 22:07
반응형

자바스크립트 함수를 매 분마다 실행하고 최대 3번 실행하기를 원합니다.

나는 페이지 등에서 데이터를 추출하는 아약스 자바스크립트 방식을 가지고 있습니다.

이 프로세스가 매 분마다 시간 간격을 두고 실행되기를 원합니다.하지만 나는 그것이 영원히 반복되는 것을 원하지 않기 때문에, 최대 3번까지.

이를 구현하는 가장 좋은 방법은 무엇입니까?

다음과 같이:

var runCount = 0;    
function timerMethod() {
    runCount++;
    if(runCount > 3) clearInterval(timerId);

    //...
}

var timerId = setInterval(timerMethod, 60000);    //60,000 milliseconds

폐쇄 기반 솔루션, 사용setInterval()그리고.clearInterval():

// define a generic repeater
var repeater = function(func, times, interval) {
  var ID = window.setInterval( function(times) {
    return function() {
      if (--times <= 0) window.clearInterval(ID);
      func();
    }
  }(times), interval);
};

// call the repeater with a function as the argument
repeater(function() {
  alert("stuff happens!");
}, 3, 60000);

EDIT: 동일한 것을 표현하는 또 다른 방법, 사용setTimeout()대신:

var repeater = function(func, times, interval) {
  window.setTimeout( function(times) {
    return function() {
      if (--times > 0) window.setTimeout(arguments.callee, interval);
      func();
    }
  }(times), interval);
};

repeater(function() {
  alert("stuff happens!");
}, 3, 2000);

아마도 후자가 조금 더 이해하기 쉬울 것입니다.

에서setTimeout()이전 버전의 실행이 완료된 에만 다음 반복이 발생하도록 할 수 있습니다.당신은 간단히 이동할 것입니다.func()에 선setTimeout()선.

재사용 가능한 접근법

function setMaxExeuctionInterval( callback, delay, maxExecutions )
{
  var intervalCallback = function()
  {
    var self = intervalCallback;
    if ( 'undefined' == typeof self.executedIntervals )
    {
      self.executedIntervals = 1;
    }
    if ( self.executedIntervals == maxExecutions )
    {
      clearInterval( self.interval )
    }
    self.executedIntervals += 1;
    callback();
  };
  intervalCallback.interval = setInterval( intervalCallback, delay );
}

// console.log requires Firebug
setMaxExeuctionInterval( function(){ console.log( 'hi' );}, 700, 3 );
setMaxExeuctionInterval( function(){ console.log( 'bye' );}, 200, 8 );

이 익명 기능(새로운 글로벌을 소개하지 않음)은 필요한 것을 수행합니다.당신이 해야 할 일은 교체하는 것입니다.yourFunction당신의 기능으로.

(function(fn, interval, maxIterations) {
    var iterations = 0,
    id = setInterval(function() {
        if (++iterations > maxIterations)
            return clearInterval(id);

        fn();
    }, interval);
})(yourFunction, 60000, 3);

setInterval로 할 수 있습니다.

var count = 0;

var interval = setInterval(yourFunction(), 1000);

function yourFunction (){

  clearInterval(interval);  
  if(count < 3){

    count ++;
    interval = setInterval(yourFunction(), 1000);
  }

// your code


}

Tomalak 기능 확장하기

남은 사이클 수를 알고 싶은 경우:

var repeater = function(func, times, interval) {
    window.setTimeout( function(times) {
    return function() {
      if (--times > 0) window.setTimeout(arguments.callee, interval);
      func(times);
    }
  }(times), interval);
}

및 사용:

repeater(function(left){
    //... (do you stuff here) ...
    if(left == 0) {
        alert("I'm done");
    }
}, 3, 60000);

setInterval을 사용합니다. 참조를 얻어야 합니다.

var X=setInterval(....);

또한, 글로벌 카운터를 가지고 있습니다.

var c=0;

SetIntervale에 의해 호출되는 함수 내에서 다음을 수행합니다.

c++;
if(c>3) window.clearInterval(X);

setInterval()을 사용한 다음 호출된 함수 내부에서 함수를 실행한 횟수를 카운트한 후 삭제할 수 있습니다.간격().

또는 setTimeout()을 사용한 다음 호출된 함수 setTimeout()을 다시 호출하여 세 번 수행할 수 있습니다.

var testTimeInt = 3;
function testTime(){

    testTimeInt--;

    if(testTimeInt>0)
       setTimeOut("testTime()", 1000);

}


setTimeOut("testTime()", 1000);

언급URL : https://stackoverflow.com/questions/1245617/want-a-javascript-function-to-run-every-minute-but-max-3-times

반응형