ホームページ  >  記事  >  ウェブフロントエンド  >  プロトタイプ PeriodicalExecuter オブジェクト learning_prototype

プロトタイプ PeriodicalExecuter オブジェクト learning_prototype

WBOY
WBOYオリジナル
2016-05-16 18:49:471005ブラウズ

これは、関数を定期的に実行するための単純な機能です。これは基本的に、ネイティブ Window オブジェクトにあるネイティブの clearInterval/setInterval メカニズムをカプセル化します。これは、特定の間隔でユーザーと対話するために使用する場合に特に便利です。例: プロンプトまたは確認呼び出しを使用する): これにより、アクションを待機する複数のメッセージ ボックスが回避されます。ただし、このオブジェクトはメソッドを定期的に実行できますが、その内部で 1 回の呼び出しが行われるのを防ぐことができます。何らかの理由でメソッドが実行された後、再度次の呼び出しが行われるため、メソッドが 2 回続けて実行されることになります。上の 2 番目の英語の文はこれを意味します。

ヘルプ文書には、このオブジェクトがメソッド停止を 1 つだけ提供すると書かれていますが、私が調べたソース コードには、ある時点でトリガーされる必要があるイベント onTimerEvent も提供されています。しかし、ヘルプドキュメントには例がありません。

このオブジェクトのソース コードは比較的単純で、コメントなしでここに直接投稿されます:




コードをコピー

コードは次のとおりです: var PeriodicalExecuter = Class.create({ initialize: function(callback,frequency) { this.callback = callback;
this.周波数 = 周波数;

this.registerCallback();

registerCallback: function() {
this.timer = setInterval (this.onTimerEvent .bind(this), this.frequency * 1000);
},

実行: function() {
this.callback(this); 🎜>
stop: function() {
if (!this.timer) return;
this.timer = null;
onTimerEvent : function() {
if (!this.currentlyExecuting) {
try {
this.currentlyExecuting = true;
this.execute(); ) {
/* try/finally をサポートしないクライアント用の空のキャッチ */
}
finally {
this.currentlyExecuting =
}
}
}
});


例を見てください:




コードをコピーします


コード


new PeriodicalExecuter(function(pe) {
if (!confirm('後でまた迷惑をかけますか?'))
pe.stop(); },
5);
// ユーザーが質問に答えるのに時間がかかりすぎる場合、そのようなメッセージのスタックは存在しないことに注意してください。 //
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。