NodeJS setImmediate 和私有类方法

问题描述 投票:0回答:1

所以,第一次尝试

setImmediate
。看来它不能运行私有类方法。是这样吗?如果是的话,有人可以向我解释一下为什么吗?

不起作用

私有类方法作为

setImmediate
的参数。投掷
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();

这确实有效

静态类方法作为参数

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();
javascript node.js typescript event-loop setimmediate
1个回答
2
投票

如果传递

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

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

setImmediate(this.looper.bind(this));
setImmediate(() => this.looper());
© www.soinside.com 2019 - 2024. All rights reserved.