Javascript 基于承诺的取消间隔会导致角度错误
我有这样的业务逻辑,我希望每1秒检查一次服务中的一些数据,如果该数据返回的某些属性为true,我希望取消间隔。例如:Javascript 基于承诺的取消间隔会导致角度错误,javascript,angular,typescript,asynchronous,promise,Javascript,Angular,Typescript,Asynchronous,Promise,我有这样的业务逻辑,我希望每1秒检查一次服务中的一些数据,如果该数据返回的某些属性为true,我希望取消间隔。例如: someFn() { this.interval = setInterval(this.getData, 1000, param1, param2); } private async getData(param1: string, param2: string) { const data = await this.service.getSomeDat
someFn() {
this.interval = setInterval(this.getData, 1000, param1, param2);
}
private async getData(param1: string, param2: string) {
const data = await this.service.getSomeData(param1);
if (data && receipt.success) {
console.log('SUCCESS!');
console.log('Clearing interval', this.interval);
clearInterval(this.interval);
}
}
但是,即使我正在输入if块并输出SUCCESS,间隔也不会停止执行。间隔似乎没有定义。我猜这是因为一些承诺魔法,但我不太明白为什么。感谢您的帮助
编辑:调用someFn
的按钮如下所示
<button class="btn btn-primary" (click)="myService.someFn()">Do Logic</button>
Do逻辑
Edit2:如果我在
someFn
函数中设置console.log(this.interval),它会记录一个id。但是在getData中,this.interval
是未定义的。我已经找到了它。我不是传递对setInterval的引用,而是在回调中执行函数。因此:
someFn() {
this.interval = setInterval(this.getData, 1000, param1, param2);
}
变成
someFn() {
this.interval = setInterval(() => this.getData(param1, param2), 1000);
}
它可以工作。哪里调用了someFn,如果它被调用了不止一次,您将失去以前的idsomeFn,只需单击一次按钮,它就会执行一些逻辑,然后设置间隔。传递给getData的参数是好的,但是
这个.interval
是未定义的。它是用()=>或按钮处理程序上的FUNCTION调用的吗?您是否可以公开eventListener似乎不起作用。我已经编辑了这个问题again@EugenSunic我通过在setInterval的回调中执行getData解决了这个问题。它可能没有将this.interval值绑定到服务的范围,因为我只传递了对fnOK的引用,但可能不是因为您认为的原因this.interval=setInterval(this.getData.bind(this),1000,param1,param2)代码>也应该起作用。bind(this)
是将this
的含义传达给以其他方式分离的this.getData()
所必需的。