ошибка при использовании операторов finalize, catcherror - PullRequest
1 голос
/ 09 марта 2019

Я пытаюсь реализовать таблицу угловых данных, используя отличный пример, предоставленный угловым университетом. Но я застрял на реализации моего источника данных. Вот мой источник данных:

import { Aircraft } from '../shared/aircraft';
import { AircraftInfoService } from './aircraft-info.service';
import { BehaviorSubject } from 'rxjs';
import { CollectionViewer, DataSource } from '@angular/cdk/collections';
import { Observable } from 'rxjs';
import 'rxjs/add/operator/catchError';
import 'rxjs/add/operator/finalize';

export class allAircraftInfoDataSource implements DataSource<Aircraft> {

  private aircraftDBSubject = new BehaviorSubject<Aircraft[]>([]);
  private loadingSubject = new BehaviorSubject<boolean>(false);

  public loading$ = this.loadingSubject.asObservable();

  constructor(private aircraftInfoService: AircraftInfoService) {}

  connect(collectionViewer: CollectionViewer): Observable<Aircraft[]> {
      return this.aircraftDBSubject.asObservable();
  }

  disconnect(collectionViewer: CollectionViewer): void {
      this.aircraftDBSubject.complete();
      this.loadingSubject.complete();
  }

  getAircraft() {

      this.loadingSubject.next(true);

      this.aircraftInfoService.getAircraft().pipe(
        catchError(() => **of**([])),
        finalize(() => this.loadingSubject.next(false))
    )
    .subscribe(data => this.aircraftDBSubject.next(data));      
  }    
}

Я получаю сообщения об ошибках «catchError», «of», «finalize», и второе использование «data» вызывает ошибки. Вот мои ошибки компиляции:

ERROR in ../../src/app/services/aircraft-info-datasource.service.ts(31,9): error TS2552: Cannot find name 'catchError'. Did you mean 'RTCError'?
../../src/app/services/aircraft-info-datasource.service.ts(31,26): error TS2304: Cannot find name 'of'.
../../src/app/services/aircraft-info-datasource.service.ts(32,9): error TS2304: Cannot find name 'finalize'.
../../src/app/services/aircraft-info-datasource.service.ts(34,52): error TS2345: Argument of type '{}' is not assignable to parameter of type 'Aircraft[]'.
  Type '{}' is missing the following properties from type 'Aircraft[]': length, pop, push, concat, and 26 more.

Я думал, что следовал примерам к письму, но я явно что-то упустил. Что мне нужно исправить?

спасибо .....

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Вы импортируете RxJS 5 "патч-стиль" операторов и пытаетесь использовать их как RxJS 6 "трубопроводные операторы" (также catchError ранее был известен как catch в RxJS 5).

import { of } from 'rxjs';
import { catchError, finalize } from 'rxjs/operators';

Документы по миграции см .:

0 голосов
/ 09 марта 2019

Вам необходимо импортировать символ catchError из rxjs/operators:

import { catchError, finalize } from 'rxjs/operators';

Посмотрите здесь , чтобы узнать подробнее о новых изменениях, которые пришли с rxjs из v6 +.

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