Я пытаюсь опросить данные в реальном времени с моего сервера с помощью 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)