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() {