Javascript 我正在使用setTimeout()调用刷新函数,但当我移动到另一个组件时,它不会停止调用刷新吗?
我是angular的新手,我有一个函数refresh,我需要在每1分钟后调用一次,但当我进入该组件时,它工作正常,当我导航到其他视图时,它仍在调用refresh函数,在ngOnInit()中调用refresh函数,然后在refresh()中创建这个setTimeout()函数只起作用Javascript 我正在使用setTimeout()调用刷新函数,但当我移动到另一个组件时,它不会停止调用刷新吗?,javascript,angular,Javascript,Angular,我是angular的新手,我有一个函数refresh,我需要在每1分钟后调用一次,但当我进入该组件时,它工作正常,当我导航到其他视图时,它仍在调用refresh函数,在ngOnInit()中调用refresh函数,然后在refresh()中创建这个setTimeout()函数只起作用 ngOnInit(){ this.refresh(); } ... ... refresh(){ ... ... setTimeout(() => { this.refresh(); }
ngOnInit(){
this.refresh();
}
...
...
refresh(){
...
...
setTimeout(() => {
this.refresh();
},10000)
}
您可以再创建一个属性,如
timeout
,并像这样更新您的类
ngOnInit(){
this.refresh();
}
...
...
timeout;
refresh(){
...
...
this.timeout = setTimeout(() => {
this.refresh();
},10000)
}
除了OnInit
之外,您的类还必须为此实现OnDestroy
接口
尽管对于您的用例,setInterval
更有意义,而且您还可以创建一个可重用的服务,如IntervalService
来封装整个行为
设置间隔位:-
interval;
ngOnInit()
{
this.interval = setInterval(() => {
this.refresh();
}, 10000);
}
ngOnDestroy(){
clearInterval(this.interval);
}
refresh(){....}
您可以再创建一个属性,如
timeout
,并像这样更新您的类
ngOnInit(){
this.refresh();
}
...
...
timeout;
refresh(){
...
...
this.timeout = setTimeout(() => {
this.refresh();
},10000)
}
除了OnInit
之外,您的类还必须为此实现OnDestroy
接口
尽管对于您的用例,setInterval
更有意义,而且您还可以创建一个可重用的服务,如IntervalService
来封装整个行为
设置间隔位:-
interval;
ngOnInit()
{
this.interval = setInterval(() => {
this.refresh();
}, 10000);
}
ngOnDestroy(){
clearInterval(this.interval);
}
refresh(){....}
您应该使用
setInterval
而不是setTimeout
,并且在Ngondestory中您需要使用clearInterval
this.timer = setInterval(() => {
this.refresh();
}, 10000);
净间隔
ngOnDestroy(){
clearInterval(this.timer);
}
您应该使用
setInterval
而不是setTimeout
,并且在Ngondestory中您需要使用clearInterval
this.timer = setInterval(() => {
this.refresh();
}, 10000);
净间隔
ngOnDestroy(){
clearInterval(this.timer);
}
您创建了一个递归调用,没有任何条件停止它。是的,这就是我想知道如何停止它,首先我使用了“订阅”和“取消订阅”,但如果导航到另一个页面,它会停止间隔,但当我返回到同一页面时,它会再次启动,但不会停止。但我将尝试以下两种回答您可以在调用setTimeout之前或从setTimeout内调用refresh之前设置一个条件。给出的任何一个答案都适用于你的用例。你创建了一个递归调用,没有任何条件来停止它。是的,这就是我想知道如何停止它,首先我使用了“订阅”和“取消订阅”,但如果导航到另一个页面,它会停止间隔,但当我返回到同一页面时,它又开始了,但从未停止过。但我将尝试以下两种回答您可以在调用setTimeout之前或从setTimeout内调用refresh之前设置一个条件。给定的任何一个答案都适用于您的用例。当我导航到其他视图时,它可以正常工作,但当我再次想要返回到同一视图时,会调用此函数setInterval,然后当我再次更改视图时,也会调用refresh()。我遗漏了什么?你只是在init生命周期方法中开始了间隔,对吗?如果您的刷新调用了一个API,并且您正在解析一个承诺,那么很可能该API在您的组件已经调用了销毁生命周期方法之后解析,但是间隔应该已经明确停止。您可以使用subscribe/unsubscribe替换承诺位,以获得无过时请求。当我导航到其他视图时,它可以正常工作,但当我再次希望返回到同一视图时,会调用此函数setInterval,然后当我再次更改视图时,也会调用refresh()。我遗漏了什么?你只是在init生命周期方法中开始了间隔,对吗?如果您的刷新调用了一个API,并且您正在解析一个承诺,那么很可能该API在您的组件已经调用了销毁生命周期方法之后解析,但是间隔应该已经明确停止。您可以使用subscribe/unsubscribe替换承诺位,以获得无过时请求。当我导航到其他视图时,它可以正常工作,但当我再次想要返回到同一视图时,会调用此函数setInterval(),然后当我再次更改视图时,也会调用refresh()。我遗漏了什么?您需要确保在ngOnDestroy钩子中清除了
setInterval
。当我导航到其他视图时,它可以正常工作,但当我再次想返回到同一视图时,会调用此函数setInterval(),然后当我再次更改视图时,也会调用refresh()。我遗漏了什么?您需要确保在Ngondestry钩子中清除setInterval