IT story

JavaScript에서 함수를 주기적으로 호출하는 방법이 있습니까?

hot-time 2020. 7. 17. 07:57
반응형

JavaScript에서 함수를 주기적으로 호출하는 방법이 있습니까?


JavaScript에서 함수를 주기적으로 호출하는 방법이 있습니까?


당신이 원하는 setInterval():

var intervalID = setInterval(function(){alert("Interval reached");}, 5000);

setInterval () 의 첫 번째 매개 변수는 평가할 코드 문자열 일 수도 있습니다.

다음을 사용하여 주기적 기능을 지울 수 있습니다.

clearInterval(intervalID);

하여 setInterval ()는 종종주기적인 실행을위한 최적의 솔루션 아님을 유의하시기 바랍니다 - 그것은 정말 당신이 실제로 정기적으로 전화하는거야 자바 스크립트에 따라 달라집니다.

예. 1000ms의 기간으로 setInterval ()을 사용하고 주기적 함수에서 때로는 2 초가 걸리는 아약스 호출을하면 첫 번째 응답이 다시 발생하기 전에 다른 아약스 호출을합니다. 이것은 일반적으로 바람직하지 않습니다.

많은 라이브러리에는 Nelson이 제공 한 프로토 타입 예제와 같이 setInterval을 순진하게 사용하는 함정을 방지하는주기적인 방법이 있습니다.

jQuery ajax 호출이 포함 된 함수를 사용하여보다 강력한주기적인 실행을 달성하려면 다음과 같이 고려하십시오.

function myPeriodicMethod() {
  $.ajax({
    url: ..., 
    success: function(data) {
      ...
    },
    complete: function() {
      // schedule the next request *only* when the current one is complete:
      setTimeout(myPeriodicMethod, 1000);
    }
  });
}

// schedule the first invocation:
setTimeout(myPeriodicMethod, 1000);

또 다른 방법은 setTimeout을 사용하지만 변수에서 경과 시간을 추적 한 다음 각 호출에서 시간 초과 지연을 동적으로 설정하여 가능한 한 원하는 간격에 가깝게 함수를 실행하지만 응답을 다시 얻을 수있는 것보다 빠르지는 않습니다.


모든 사람은 이미 setTimeout / setInterval 솔루션을 가지고 있습니다. 문자열뿐만 아니라 setInterval에 함수를 전달할 수 있다는 점에 유의해야한다고 생각합니다. 실제로는 해당 함수에 "평가"될 문자열 대신 실제 함수를 전달하는 "약간"일 것입니다.

// example 1
function test() {
  alert('called');
}
var interval = setInterval(test, 10000);

또는:

// example 2
var counter = 0;
var interval = setInterval(function() { alert("#"+counter++); }, 5000);

오래된 질문이지만 .. 나는 또한 정기적 인 작업 주자가 필요했고 TaskTimer을 썼습니다 . 다른 간격으로 여러 작업을 실행해야 할 때도 유용합니다.

// Timer with 1000ms (1 second) base interval resolution.
var timer = new TaskTimer(1000)

// Add task(s) based on tick intervals.
timer.addTask({
    name: 'job1',       // unique name of the task
    tickInterval: 5,    // run every 5 ticks (5 x interval = 5000 ms)
    totalRuns: 10,      // run 10 times only. (set to 0 for unlimited times)
    callback: function (task) {
        // code to be executed on each run
        console.log(task.name + ' task has run ' + task.currentRuns + ' times.');
    }
});

// Start the timer
timer.start();

TaskTimer브라우저와 노드 모두에서 작동합니다. 모든 기능에 대한 설명서참조하십시오 .


setInterval () 및 setTimeout ()을 살펴보고자합니다.

여기 괜찮은 튜토리얼 기사가 있습니다.


예 - 한 번 봐 걸릴 setIntervalsetTimeout 특정 시간에 코드를 실행합니다. setInterval은 주기적으로 코드를 실행하는 데 사용되는 것입니다.

사용법을 보려면 여기 에서 데모를보고 대답하십시오.


function test() {
 alert('called!');
}
var id = setInterval('test();', 10000); //call test every 10 seconds.
function stop() { // call this to stop your interval.
   clearInterval(id);
}

함수가 주기적으로 실행되기를 원하므로 setInterval을 사용하십시오.


The native way is indeed setInterval()/clearInterval(), but if you are already using the Prototype library you can take advantage of PeriodicalExecutor:

new PeriodicalUpdator(myEvent, seconds);

This prevents overlapping calls. From http://www.prototypejs.org/api/periodicalExecuter:

"it shields you against multiple parallel executions of the callback function, should it take longer than the given interval to execute (it maintains an internal “running” flag, which is shielded against exceptions in the callback function). This is especially useful if you use one to interact with the user at given intervals (e.g. use a prompt or confirm call): this will avoid multiple message boxes all waiting to be actioned."

참고URL : https://stackoverflow.com/questions/1224463/is-there-any-way-to-call-a-function-periodically-in-javascript

반응형