使用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'))
);
如何使其工作?
答案 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
。