Вызывайте функцию немедленно и каждые X секунд - PullRequest
0 голосов
/ 05 ноября 2018

Используя 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 голосов
/ 12 ноября 2018

Вы должны подписаться на него, чтобы запустить его. Лучший способ:

// 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 здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...