私は基本クラスTimerとその中にいくつかのメソッドを持っています。私の考えは単純です、私はタイマーを実行するための基本的なクラスが必要です。基本クラスのインスタンスとしてのさまざまなタイマーの多く。しかし、私はこのように私のがらくたを実行しようとすると、私は.startTimer
と.run
javascriptでタイマーを実行する
function Timer(interval) {
this.isTimerRuns = false;
this.timerId = 0;
this.interval = interval;
}
Timer.prototype.run = function (foo) {
if(this.isTimerRuns){
foo();
setTimeout(this.run(foo), this.interval);
}
else{
this.stopTimer();
}
};
Timer.prototype.startTimer = function (foo) {
this.timerId = setTimeout(this.run(foo), this.interval);
this.isTimerRuns = true;
};
Timer.prototype.stopTimer = function() {
clearInterval(this.timerId);
this.isTimerRuns = false;
this.timerId = 0;
};
Timer.prototype.ajaxCall = function (url, method, successFunc, errorFunc) {
$.ajax({
url: url,
type: method,
success: function (data) {
var respond = JSON.parse(data);
successFunc(respond);
},
error: function() {
if(errorFunc != null){
errorFunc();
}
}
});
};
内のパラメータとしてメソッドを渡すべきか見当がつかない:それは一度だけ実行され、停止し
var t = new Timer(10000);
t.startTimer(t.ajaxCall("/123", "POST", test2, null));
function test2(resp) {
console.log(resp + '!');
}
。どうすれば修正できますか?
次のように行います:
'setTimeout(this.run(this).interval)'のように見えます。 – Teemu
はい。良い点。同様に、runメソッドはタイムアウト参照を保持しません。だから、おそらく全体のクラスはいくつかの再考が必要です。 –