Angular Rx JS Опрос данных в режиме реального времени. Ошибка типа карты - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь опросить данные в реальном времени с моего сервера с помощью Rx JS, используя interval и switchMap. Когда пользователь переходит к компоненту, он запускает опрос. Я получил его, запросив конечную точку HTTP напрямую (вместо расширения базового класса) с помощью следующего кода службы.

myService.ts:

public getRealTimeData() {
    return interval(5000).pipe(
      switchMap(() => {
        return this.httpClient.get('http://myendpoint:3000/endpoint');
      }),
      catchError((err) => {
        console.log('Handling error locally and rethrowing it...', err);
        return throwError(err);
      })
    );
  }

Однако я не могу обернуть свою Подумайте, почему, когда я расширяю базовый класс обслуживания и делаю то же самое в базовом классе, возникает ошибка

myService.ts:

...
constructor(){
    super(httpClient, 'my_custom_route')
}

public getRealTimeDataExtendingBaseClass() {
    return interval(5000).pipe(
      switchMap(() => {
        this.requestURLBase();
      }),
      catchError((err) => {
        console.log('Handling error locally and rethrowing it...', err);
        return throwError(err);
      })
    );
}

baseService.ts:

protected baseUrlPrefix = 'api/v1/';
constructor(protected httpClient: HttpClient, route: string) {
   this.route = route;
}

...

public requestURLBase() {
   return this.httpClient.get(this.baseUrlPrefix + this.url); 
}

Вот стек ошибок:

errors.ts:30 ERROR TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
    at Object.exports.subscribeTo (subscribeTo.ts:27)
    at Object.subscribeToResult (subscribeToResult.ts:36)
    at SwitchMapSubscriber._innerSub (switchMap.ts:139)
    at SwitchMapSubscriber._next (switchMap.ts:128)
    at SwitchMapSubscriber.Subscriber.next (Subscriber.ts:99)
    at AsyncAction.dispatch (interval.ts:75)
    at AsyncAction._execute (AsyncAction.ts:122)
    at AsyncAction.execute (AsyncAction.ts:97)
    at AsyncScheduler.flush (AsyncScheduler.ts:58)
    at ZoneDelegate.invokeTask (zone.js:421)

1 Ответ

1 голос
/ 19 апреля 2020

Вы забыли возврат потока запросов.

switchMap(() => {
  return this.requestURLBase(); // <- return!!!
}),
...