NodeJS setImmediate 和私有 class 方法

NodeJS setImmediate and private class method

所以,第一次尝试 setImmediate。它似乎不能 运行 私有 class 方法。是这样吗?如果是,有人可以向我解释为什么吗?

不起作用

Private class method as argument to setImmediate. Throws Callback must be a function. Received undefined

class TestPrivate {
    public start(): void {
        setImmediate(this.looper);
    }

    async looper(): Promise<void> {
        console.log(`${new Date().toLocaleString()}`);
        await sleep(500);
        setImmediate(this.looper);
    }
}

const testPrivate: TestPrivate = new TestPrivate();
testPrivate.start();

这确实有效

Static class method as argument to setImmediate

class TestStatic {
    public start(): void {
        setImmediate(TestStatic.looper);
    }

    static async looper(): Promise<void> {
        console.log(`${new Date().toLocaleString()}`);
        await sleep(500);
        setImmediate(TestStatic.looper);
    }
}

const testStatic: TestStatic = new TestStatic();
testStatic.start();

如果您传递 this.looper,那么在函数被调用时,looper 将不再具有对 this 的正确引用,因此这会在第二次迭代时中断。

使用以下方法之一解决此问题:

setImmediate(this.looper.bind(this));
setImmediate(() => this.looper());