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つのコールバック関数を指定していますか?
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 。