setInterval():如何停止然后重新开始?
setInterval(): How to stop then start itself again?
在if语句中,我想让区间自行清除,然后再次调用自身的对象函数重新启动区间。
这可能吗?
我试过这种方法,但出现了意外行为。我可以看到日志每 200 毫秒持续记录一次。虽然它应该已经停止,因为间隔已停止并重新启动并且条件不会再评估为真。
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;
}
}
我认为 setInterval 调用的范围是错误的。
尝试改变
this.tickIntervalId = setInterval(function tick() {
使用自己
self.tickIntervalId = setInterval(function tick() {
在if语句中,我想让区间自行清除,然后再次调用自身的对象函数重新启动区间。
这可能吗?
我试过这种方法,但出现了意外行为。我可以看到日志每 200 毫秒持续记录一次。虽然它应该已经停止,因为间隔已停止并重新启动并且条件不会再评估为真。
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;
}
}
我认为 setInterval 调用的范围是错误的。
尝试改变
this.tickIntervalId = setInterval(function tick() {
使用自己
self.tickIntervalId = setInterval(function tick() {