Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我正在使用setTimeout()调用刷新函数,但当我移动到另一个组件时,它不会停止调用刷新吗?_Javascript_Angular - Fatal编程技术网

Javascript 我正在使用setTimeout()调用刷新函数,但当我移动到另一个组件时,它不会停止调用刷新吗?

Javascript 我正在使用setTimeout()调用刷新函数,但当我移动到另一个组件时,它不会停止调用刷新吗?,javascript,angular,Javascript,Angular,我是angular的新手,我有一个函数refresh,我需要在每1分钟后调用一次,但当我进入该组件时,它工作正常,当我导航到其他视图时,它仍在调用refresh函数,在ngOnInit()中调用refresh函数,然后在refresh()中创建这个setTimeout()函数只起作用 ngOnInit(){ this.refresh(); } ... ... refresh(){ ... ... setTimeout(() => { this.refresh(); }

我是angular的新手,我有一个函数refresh,我需要在每1分钟后调用一次,但当我进入该组件时,它工作正常,当我导航到其他视图时,它仍在调用refresh函数,在ngOnInit()中调用refresh函数,然后在refresh()中创建这个setTimeout()函数只起作用

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