立即和每 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 秒调用一次函数的主要内容,如果未能解决你的问题,请参考以下文章

设置定时任务为每天凌晨2点执行和每小时执行一次

spring怎么设置定时任务为每天凌晨2点执行和每小时执行一次?

如何让 observable 立即返回数据,之后每 5 秒返回一次数据

每隔 x秒 刷新一次页面

js每隔五分钟执行一个函数

如何让linux每隔五分钟进行一次ping命令