立即和每X秒调用一次函数

时间:2018-11-05 14:33:52

标签: angular typescript rxjs angular7

使用Angular 7如何立即每隔X秒调用一次函数? 这是我在服务中的功能:(仅作为示例)

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'))
    );

如何使其工作?

1 个答案:

答案 0 :(得分:0)

您需要订阅才能启动它。最好的方法是:

// 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),

如果您不订阅可观察的项目,那么它将永远不会被解雇。在这里看不到为什么需要switchMap