web-dev-qa-db-ja.com

観測可能な.catchは関数ではありません

UNIX環境からコードを実行すると、この非常に迷惑なエラーが発生します。 _ng serve_を介してローカルでコードを実行するとこれは正常に機能しますが、サーバーにコードをデプロイすると、このエラーはすべてのプログラムの実行を停止します。

ERROR TypeError: this.http.get(...).catch is not a function

Googleの結果では、rxjs/Rxバンドルではなく、rxjs名前空間をその場所から直接インポートする必要があると記載されていますが、このエラーは発生します。他の結果は、rxjs演算子のインポートを見逃したかもしれないことを指摘していますが、それらは間違いなく私の場合に含まれています。

DevToolsを使用して、含まれているソースマップもチェックしました。演算子はブラウザーに含まれています。

このエラーが発生する理由を誰か教えてもらえますか? rxjsを使用しています:^ 5.5.2

これは私のコードです

_import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';

@Injectable()
export class MyService {
  constructor(private http: HttpClient) {}

  all(): Observable<any> {
    return this.http.get<any>('url')
      .catch(err => this.handleError(err));
  }
  handleError(error) {
    return Observable.throw(error);
  }
}
_

[〜#〜] edit [〜#〜]以下の@ Jota.Toledoのコメントに基づいて、このメソッドを使用してコードを提供します。

_this.myService.all().subscribe(
  result => {
    this.isLoading = false;
    if (result) {
      this.clients = result;
    }
  },
  error => this.isLoading = false
);
_

「演算子を追加する前にcatchメソッドを使用する」と同じように、サブスクライブで2つのコールバック関数を指定していますか?

9

rxjs 5.5.2では、lettable演算子、この場合はcatchErrorを使用してこの問題を解決できます。 import { catchError } from 'rxjs/operators/catchError';のようなoperatorsからインポートする必要があります。一般に、すべての演算子はこの方法でインポートする必要があります。observable/ofのようなobservableについても同じことが言えます。

import { catchError } from 'rxjs/operators/catchError';
import { map } from 'rxjs/operators/map';

all(): Observable<any> {
  return this.http.get<any>('url')
    .pipe(
        map(() => //do stuff),
        catchError((error: Error) => {
         //
        })
    )
}

Lettable演算子について詳しく読む here

12
AndreaM16