[javascript] ‘Observable <any>’유형에 ‘catch’특성이 없습니다.

Http 서비스 사용에 대한 Angular 2 설명서 페이지에는 예가 있습니다.

getHeroes (): Observable<Stuff[]> {
  return this.http.get(this.url)
                  .map(this.extractData)
                  .catch(this.handleError);
}

angular2-webpack-starter 프로젝트를 복제하고 위의 코드를 직접 추가했습니다.

Observable사용하여 가져 왔습니다

import {Observable} from 'rxjs/Observable';

속성 Observable을 가져 오는 것으로 가정합니다 ( .map작동). rxjs.beta-6에 대한 변경 로그를 보았으며에 대해서는 언급되어 있지 않습니다 catch.



답변

경고 :이 솔루션은 Angular 5.5부터 더 이상 사용되지 않습니다. 아래에서 Trent의 답변을 참조하십시오

=====================

예, 연산자를 가져와야합니다.

import 'rxjs/add/operator/catch';

또는 다음과 같이 가져 오십시오 Observable.

import {Observable} from 'rxjs/Rx';

그러나이 경우 모든 연산자를 가져옵니다.

자세한 내용은이 질문을 참조하십시오.


답변

RxJS 5.5 catch이상 에서는 운영자가 더 이상 사용되지 않습니다. 이제 catchError연산자를와 함께 사용해야합니다 pipe.

RxJS v5.5.2는 Angular 5의 기본 종속성 버전입니다.

수입하는 각 RxJS Operator에 대해 catchError이제 ‘rxjs / operators’에서 가져와 파이프 연산자를 사용해야합니다.

HTTP 요청 Observable에 대한 catch 오류의 예

import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';
...

export class ExampleClass {
  constructor(private http: HttpClient) {
    this.http.request(method, url, options).pipe(
      catchError((err: HttpErrorResponse) => {
        ...
      }
    )
  }
  ...
}

여기에서 catch대체 catchError되고 pipe연산자는 도트 체인에 익숙한 것과 유사한 방식으로 연산자를 구성하는 데 사용됩니다.


rxjs에 대한 문서를 참조하십시오 pipable (이전으로 알려진 lettable 대한 추가 정보를 원하시면) 연산자.


답변

In angular 8:
for catch:
import { catchError } from 'rxjs/operators';

for throw:
import { Observable, throwError } from 'rxjs';

and code should be written like this.

getEmployees(): Observable<IEmployee[]> {
    return this.http.get<IEmployee[]>(this.url).pipe(catchError(this.erroHandler));
  }

  erroHandler(error: HttpErrorResponse) {
    return throwError(error.message || 'server Error');
  }


답변