Trying to create a timer loop in TypeScript:
timeout() {
setTimeout(function () {
console.log(\'Test\');
this.timeout();
}, 1000/60);
Because of this context is lost. Use the arrow function this is better.
timeout() {
setTimeout(() => {
console.log('Test');
this.timeout();
}, 1000/60);
}
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();