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');
}