> 웹 프론트엔드 > JS 튜토리얼 > 프로토타입 PeriodicalExecuter 객체 learning_prototype

프로토타입 PeriodicalExecuter 객체 learning_prototype

WBOY
풀어 주다: 2016-05-16 18:49:47
원래의
1079명이 탐색했습니다.

이는 함수를 주기적으로 실행하기 위한 간단한 기능입니다. 이는 본질적으로 기본 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);
// 사용자가 질문에 답변하는 데 시간이 너무 오래 걸리면 이러한 메시지가 쌓이지 않습니다.
//

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿