angular - Anropa funktion omedelbart och var X:e sekund
Hur man använder Angular 7 för att anropa en funktion omedelbart och var X sekund? Detta är min funktion i tjänsten: (bara som ett exempel)
checkData(): Observable<string> {
return this.http.get('')
.pipe(
map(res => {
let result;
result = {
packageNumber: this.packageNumber,
};
return result;
})
);
}
Och i min komponent provade jag något liknande detta:
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'))
);
Hur får man det att fungera?
Svar #1
Du behöver prenumerera på det för att starta det. Bästa sättet är att:
// class def
private subscription: Subscription;
// in NgOnInit
this.subscription = this.refreshInterval$.subscribe(noop)
// in NgOnDestroy
this.subscription.unsubscribe(); // avoid memory leaks
Och för att faktiskt köra din fetchData$ kan du ersätta ditt switchMap-anrop med:
map(() => this.fetchData$.subscribe(noop),
Om du inte prenumererar på det observerbara, utlöses det aldrig. Förstår inte varför du skulle behöva switchMap här.
