web-dev-qa-db-ja.com

Angular 6:プロパティ 'catch'はタイプ 'Observable <Response>'に存在しませんか?

アプリをAngular 6にアップグレードしています。 Angular 4からアップグレードしていますが、次のコードはAngular 6でエラーを引き起こしており、Angular 4で正常に機能しました。


私が得ているエラー:

プロパティ 'of'はタイプ 'typeof Observable'に存在しません

エラー:プロパティ「catch」はタイプ「Observable」に存在しません

これらのエラーを解決するにはどうすればよいですか?

  private authInterceptor(observable: Observable<Response>): Observable<Response> {
    return observable.catch((error, source) => {
      if (error.status == 401) {
        this.router.navigateByUrl('/login');
        return Observable.of();
      } else {
        return Observable.throw(error);
      }
    });
  }
17
Shubham Verma

質問rxjs6にタグを付けたので、Angular 6へのアップグレードにはrxjs6へのアップグレードが含まれると想定しています。その場合、監視可能オブジェクトのメソッドはpipe()を使用して適用できるスタンドアロンの演算子になったため、機能していません。また、インポートが変更されました。詳細については、 移行ガイド をご覧ください。

Rxjs6では、次のようになります。

import { Observable, EMPTY, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';

private authInterceptor(observable: Observable<Response>): Observable<Response> {
   return observable.pipe(
       catchError( err => {
            if (err.status == 401) {
                this.router.navigateByUrl('/login');
                return EMPTY;
            } else {
                return throwError(err);
            }
       })
   );
 }
42
Joakim
import 'rxjs/add/operator/catch';

または、この方法でObservableをインポートします。

import {Observable} from 'rxjs';
3
Aashish K Jha

次の方法でライブラリをインポートし、コードを再配置します

import { catchError } from 'rxjs/operators';
return Observable.pipe(catchError =>...);

これは私のために働いた。

2
Susampath

Angular6に移行したため、RXJS6に移行したと想定しています。

RXJS6では、catchではなくcatchエラーを使用します here

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

Catch演算子をインポートする必要があります

import 'rxjs/add/operator/catch';
1

使用しているすべての演算子をインポートする必要があります。

import 'rxjs/add/observable/of';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/catch';
1
Mike

これは私のために働いた、私はAngular 6.1.0を使用しています。

import { Observable, Subject, of } from 'rxjs';
import { switchMap, debounceTime, distinctUntilChanged, catchError } from 'rxjs/operators';

this.ofertas = this.subjectPesquisa // Retorno Oferta[]
  .pipe(debounceTime(1000)) // Executa a ação do switchMap após 1 segundo
  .pipe(distinctUntilChanged()) // Apenas executa a ação switchMap se o termo enviado for outro
  .pipe(switchMap((termo: string) => {

    if (termo.trim() === '') {
      // Retornar um observable de array de ofertas vazio.
      return of<Oferta[]>([]);
    }

    console.log('Requisição HTTP para api: ', termo);
    return this.ofertasService.pesquisaOfertas(termo);
  }))
  .pipe(catchError((err: any) => {
    console.log('Erro: ', catchError);
    return of<Oferta[]>([]);
  }));
0
Eduardo Yuidy