JavaScript recursive setTimeout

JavaScript recursive setTimeout

本文关键字:setTimeout recursive JavaScript      更新时间:2023-09-26

我在JavaScript中定义了这个类:

function Signal(lbl, ho, tag) {
    this.lbl = lbl;
    this.ho = ho;
    this.tag = tag;
    this.getstatus = function () {
        if (this.ho) {
            $.get('/get.cgi?' + this.tag + '=?0', function (data) {
                console.log(data);
                setTimeout(this.getstatus, 1000);
            });
        }
    };
}

一旦调用了getstatus,它应该开始使用setTimout调用自己,但它没有!它只工作一次。

如果我使用没有类的函数,它可以工作!

请帮帮我。

谢谢!

问题是当计时器调用getStatus时,this方法内部没有引用对象,则可以使用 bind() 传递自定义值进行this。另请注意,在 ajax 回调中,this 引用 ajax 设置对象。

function Signal(lbl, ho, tag) {
    this.lbl = lbl;
    this.ho = ho;
    this.tag = tag;
    this.getstatus = function () {
        if (this.ho) {
            var signal = this;
            $.get('/get.cgi?' + this.tag + '=?0', function (data) {
                console.log(data);
                setTimeout(signal.getstatus.bind(signal), 1000);
            });
        }
    };
}