Свойство 'interval' не существует для типа 'typeof Observable' - PullRequest
1 голос
/ 24 марта 2020

Я хочу сделать пул из Angular 9 / Rx Js в службу отдыха, возвращающую состояние каждые 5 секунд. Служба отдыха - типичное получение, просто возвращающее статус из транзакции. Код ниже основан на нескольких поисках, включая некоторые ответы здесь, в потоке StackOver. Я продолжаю получать сообщение об ошибке, вставленное ниже.

Все ответы, которые я нашел до сих пор, говорят об импорте того, что я уже импортирую.

Любая дополнительная вещь для проверки будет высоко оценена.

ошибка:

core.js:6185 ERROR TypeError: rxjs__WEBPACK_IMPORTED_MODULE_2__.Observable.interval is not a function
    at AppComponent.ngOnInit (app.component.ts:37)
    at callHook (core.js:4686)
    at callHooks (core.js:4650)
    at executeInitAndCheckHooks (core.js:4591)
    at refreshView (core.js:11814)
    at renderComponentOrTemplate (core.js:11922)
    at tickRootContext (core.js:13391)
    at detectChangesInRootView (core.js:13425)
    at RootViewRef.detectChanges (core.js:15103)
    at ApplicationRef.tick (core.js:42712)

app.component.ts

//most relevant imports for this question
import { Observable, timer, interval, of } from 'rxjs';
import { concatMap, map, tap, switchMap } from 'rxjs/operators';
import { HttpClient } from '@angular/common/http';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  providers: [SseService],
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {

  //polledTransacaoStatus$: Observable<string>;
  pollingData: any;

  constructor(private http: HttpClient) { }

  ngOnInit() {

    const status$ = this.http.get('http://localhost:8080/extrato/1');

    this.pollingData = Observable.interval(5000) //the issue is here
      .switchMap(() => status$)
      .subscribe(
        data => {
          console.log(data);
        },
        error => {
          console.log(error);
        }
      );
  }

  ngOnDestroy() {
    this.pollingData.unsubscribe();
  }
}

1 Ответ

2 голосов
/ 24 марта 2020

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

Используйте это вместо:

ngOnInit() {
  const status$ = this.http.get('http://localhost:8080/extrato/1');

  this.pollingData = interval(5000)
    .pipe(switchMap((_: number) => status$))
    .subscribe(
      (data: any) => console.log(data),
      (error: any) => console.log(error)
    );
}

[ОБНОВЛЕНИЕ]: остановка через 60 секунд

this.pollingData = interval(5000)
  .pipe(
    switchMap((_: number) => status$),
    takeUntil(timer(60000)), // <= takeUntil will unsubscribe when timer emits  
  ).subscribe(
    (data: any) => console.log(data),
    (error: any) => console.log(error)
  );
...