在if语句中,我希望间隔清除自己,然后再次调用自身的对象函数来重新启动间隔。
这样的事情可能吗?
我试过这种方式,但我得到了意想不到的行为。我可以看到日志每200ms都会记录一次。虽然它应该已经停止,因为间隔被停止并重新启动,并且条件不再评估为真。
DateTime.prototype = {
start: function () {
var self = this;
sendAjaxRequest(this.timeUrl, function () {
var previousTime = new Date().getTime();
this.tickIntervalId = setInterval(function tick() {
var currentTime = new Date().getTime();
if ((currentTime - previousTime) < 0) {
console.log('You changed your time backwards. Restarting.');
self.stop(); // <-- stopping itself
self.start(); // <-- call to same method its running from
return;
}
self.dateElement.innerHTML = new Date();
previousTime = currentTime;
return tick;
}(), 200);
});
},
stop: function () {
clearInterval(this.tickIntervalId);
this.tickIntervalId = null;
}
}
答案 0 :(得分:1)
我认为setInterval调用的范围是错误的。
尝试更改
this.tickIntervalId = setInterval(function tick() {
使用自我
self.tickIntervalId = setInterval(function tick() {