在Typescript中的setInterval和setTimeout

4
我正在学习Typescript,并尝试在一段时间内多次打印控制台消息。但在我的测试中,这只发生了一次,你知道原因吗?
以下是代码:
 class Class {
    private msg: string;
    constructor(msg: string) {
        this.msg = msg;
    }
    private printMsg(): void {
        console.log(this.msg);
    };
    public repeatMsg(): void {
        let intervalo = setInterval(this.printMsg(), 2000);
        setTimeout(function() {
            clearInterval(intervalo);
        }, 40000);
    }
}

let test: Class;
test = new Class("Hello");
test.repeatMsg();

4
去掉(),你正在立即调用函数,setInterval期望一个函数引用,就像你在timeout中提供的匿名函数一样。 - Sterling Archer
2
可能是使用setTimeout()调用函数的重复问题 - Sterling Archer
去掉 () 会破坏 this.msg。但使用 this.pringMsg.bind(this) 就可以解决这个问题。 - Jake Holzinger
1个回答

15

你代码中的问题在这里:

setInterval(this.printMsg(), 2000);

setInterval 的第一个参数需要是一个函数。表达式 this.printMsg() 是对函数的调用,实际上返回值为 void。有两种方法可以解决这个问题。使用 lambda:

setInterval(() = > this.printMsg(), 2000);

或者使用 bind:

setInterval(this.printMsg.bind(this), 2000);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接