首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在使用setTimeout()调用刷新函数,但是当我移动到另一个组件时,它不会停止调用刷新吗?

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

Stack Overflow用户
提问于 2021-02-04 14:06:22
回答 2查看 302关注 0票数 0

我刚接触angular,并且我有一个名为refresh的函数,我每隔1分钟就需要调用它,但是当我进入该组件时,它工作得很好,当我导航到其他视图时,它仍然在调用refresh函数,refresh函数在ngOnInit()中被调用,然后我在refresh()函数中创建了这个setTimeout()函数。

代码语言:javascript
复制
ngOnInit(){
 this.refresh();
 }
 ...
 ...

refresh(){
...
...

setTimeout(() => {
  this.refresh();
   },10000) 
 }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-04 14:12:43

您可以再创建一个像timeout这样的属性,并像这样更新您的类,

代码语言:javascript
复制
ngOnInit(){
 this.refresh();
 }
 ...
 ...
timeout;
refresh(){
...
...

this.timeout = setTimeout(() => {
  this.refresh();
   },10000) 
 }
代码语言:javascript
复制
ngOnDestroy(){
  clearTimeout(this.timeout);
}

除了OnInit之外,您的类还必须为此实现OnDestroy接口。

尽管对于你的用例来说,setInterval更有意义,而且你也可以像IntervalService一样做一个可重用的服务来封装整个行为。

setInterval位:-

代码语言:javascript
复制
interval;

ngOnInit()
{
this.interval = setInterval(() => {
   this.refresh();
}, 10000);
}
ngOnDestroy(){
  clearInterval(this.interval);
}

refresh(){....}
票数 0
EN

Stack Overflow用户

发布于 2021-02-04 14:27:41

您应该使用setInterval而不是setTimeout,并且在ngOnDestroy中需要使用clearInterval

代码语言:javascript
复制
this.timer = setInterval(() => {
   this.refresh();
}, 10000);

清除间隔

代码语言:javascript
复制
ngOnDestroy(){
  clearInterval(this.timer);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66040164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档