이는 함수를 주기적으로 실행하기 위한 간단한 기능입니다. 이는 본질적으로 기본 Window 객체에 있는 기본clearInterval/setInterval 메커니즘을 캡슐화합니다.
이는 특정 간격으로 사용자와 상호 작용하는 데 특히 유용합니다. 예: 프롬프트 또는 확인 호출 사용): 이렇게 하면 여러 메시지 상자가 모두 작업을 기다리는 것을 방지할 수 있습니다.
이 개체는 주기적으로 메서드를 실행할 수 있지만 내부 상태를 유지하므로 한 번의 호출이 방지될 수 있습니다. 어떤 이유로 인해 실행 중이었는데 다음 호출이 다시 발생하여 해당 메서드가 연속으로 두 번 실행됩니다. 위의 영어 두 번째 문장은 이런 의미입니다.
도움말 문서에는 이 객체가 stop 메소드를 하나만 제공한다고 나와 있지만, 제가 살펴본 소스 코드에서는 특정 시점에 트리거되어야 하는 onTimerEvent 이벤트도 제공합니다. 그러나 도움말 문서에는 예제가 없습니다.
이 개체의 소스 코드는 비교적 간단합니다. 코멘트 없이 여기에 직접 게시됩니다.
var PeriodicalExecuter = Class.create({
initialize: function(callback, 빈도) {
this.callback = callback;
this. 주파수 = 빈도;
this.currentlyExecuting = false;
this.registerCallback()
},
registerCallback: function() {
this.timer = setInterval (this.onTimerEvent .bind(this), this.주파수 * 1000)
},
실행: function() {
this.callback(this)},
stop: function() {
if (!this.timer) return;
clearInterval(this.timer)
this.timer =
},
onTimerEvent : function() {
if (!this.currentlyExecuting) {
try {
this.currentlyExecuting = true;
this.execute()
} catch(e ) {
/* try/finally를 지원하지 않는 클라이언트에 대한 빈 캐치 */
}
finally {
this.currentlyExecuting = false
}
}
}
});
예제 보기:
new PeriodicalExecuter(function(pe) {
if (!confirm('나중에 또 짜증나게 하시겠습니까?'))
pe.stop(); },
5);
// 사용자가 질문에 답변하는 데 시간이 너무 오래 걸리면 이러한 메시지가 쌓이지 않습니다.
//