Trying to create a timer loop in TypeScript:
timeout() {
setTimeout(function () {
console.log('Test');
this.timeout();
}, 1000/60);
}
But after the first loop works correctly I'm getting this error: "Uncaught TypeError: this.timeout is not a function". It seems that the this variable does not exist after the initial loop. Any ideas?
Because your this
doesn't refer to the object. Every function has it's own this. So your this
is the one which is defined by anonymous function inside the setTimeout()
.
To make your program work, you need to hold the this
before the timeout and use throught that variable.
class Test {
timeout() {
var that = this;
setTimeout(function () {
console.log('Test');
that.timeout();
}, 1000/60);
}
}
let t = new Test();
t.timeout();
Or you can work with lambda functions
, which will keep the this
to your object.Lamda
's this
will refer to the outer's this
, which call the lambda function`.
class Test {
timeout() {
setTimeout(() => {
console.log('Test');
this.timeout();
}, 1000/60);
}
}
let t = new Test();
t.timeout();
Because of this context is lost. Use the arrow function this is better.
timeout() {
setTimeout(() => {
console.log('Test');
this.timeout();
}, 1000/60);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With