立即和每 X 秒调用一次函数
Posted
技术标签:
【中文标题】立即和每 X 秒调用一次函数【英文标题】:Call function immediately and every X seconds 【发布时间】:2019-04-08 22:25:03 【问题描述】:使用 Angular 7 如何? 这是我在服务中的功能:(仅作为示例)
checkData(): Observable<string>
return this.http.get('')
.pipe(
map(res =>
let result;
result =
packageNumber: this.packageNumber,
;
return result;
)
);
在我的组件中,我尝试了这样的事情:
private killTrigger: Subject<void> = new Subject();
private fetchData$: Observable<string> = this.packageService.checkData();
private refreshInterval$: Observable<string> = timer(0, 1000)
.pipe(
takeUntil(this.killTrigger),
switchMap(() => this.fetchData$),
catchError(error => of('Error'))
);
如何让它发挥作用?
【问题讨论】:
我想你在找interval @WillCain 可以立即使用吗?timer(0, 1000)
已经这样做了。你订阅了吗?
@ChrisK。如果想在没有初始延迟的情况下开始发射,请使用 timer
timer(0, 1000).pipe(...).subscribe(...)
【参考方案1】:
您需要订阅它才能启动它。最好的办法是:
// class def
private subscription: Subscription;
// in NgOnInit
this.subscription = this.refreshInterval$.subscribe(noop)
// in NgOnDestroy
this.subscription.unsubscribe(); // avoid memory leaks
要真正解雇您的fetchData$
,您可以将您的switchMap
调用替换为:
map(() => this.fetchData$.subscribe(noop),
如果你不订阅 observable,它永远不会被触发。不明白为什么需要switchMap
。
【讨论】:
以上是关于立即和每 X 秒调用一次函数的主要内容,如果未能解决你的问题,请参考以下文章
spring怎么设置定时任务为每天凌晨2点执行和每小时执行一次?