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());
所以,第一次尝试 setImmediate
。它似乎不能 运行 私有 class 方法。是这样吗?如果是,有人可以向我解释为什么吗?
不起作用
Private class method as argument to
setImmediate
. ThrowsCallback 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());