setInterval():如何停止再重启?

时间:2015-03-28 22:43:15

标签: javascript oop scope setinterval

在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;
    }
}

1 个答案:

答案 0 :(得分:1)

我认为setInterval调用的范围是错误的。

尝试更改

this.tickIntervalId = setInterval(function tick() {

使用自我

self.tickIntervalId = setInterval(function tick() {