So, first time experimenting with setImmediate
. It seems it can't run private class methods. Is that so? If yes, can someone explain to me why?
Doesn't work
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();
This does work
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();
CodePudding user response:
If you pass this.looper
, then the by the time the function is called, looper will no longer have a correct reference to this
, so this breaks on the second iteration.
Solve this by using one of the following:
setImmediate(this.looper.bind(this));
setImmediate(() => this.looper());