所以,第一次尝试
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();
如果传递
this.looper
,那么当调用该函数时,looper 将不再具有对 this
的正确引用,因此这会在第二次迭代时中断。
使用以下方法之一解决此问题:
setImmediate(this.looper.bind(this));
setImmediate(() => this.looper());