Op de Angular 2-documentatiepagina voor het gebruik van de Http-service staat een voorbeeld.
getHeroes (): Observable<Stuff[]> {
return this.http.get(this.url)
.map(this.extractData)
.catch(this.handleError);
}
Ik heb het project angular2-webpack-startergekloond en de bovenstaande code zelf toegevoegd.
Ik heb Observable
geïmporteerd met
import {Observable} from 'rxjs/Observable';
Ik neem aan dat de eigenschappen Observable
ook worden geïmporteerd (.map
werkt). Gekeken naar de changelog voor rxjs.beta-6 en er wordt niets vermeld over catch
.
Antwoord 1, autoriteit 100%
Waarschuwing: deze oplossing is verouderd sinds Angular 5.5, raadpleeg het antwoord van Trent hieronder
=====================
Ja, u moet de operator importeren:
import 'rxjs/add/operator/catch';
Of importeer Observable
op deze manier:
import {Observable} from 'rxjs/Rx';
Maar in dit geval importeert u alle operators.
Zie deze vraag voor meer details:
Antwoord 2, autoriteit 44%
Met RxJS 5.5+ is de operator catch
nu verouderd. Gebruik nu de operator catchError
in combinatie met pipe
.
RxJS v5.5.2 is de standaard afhankelijkheidsversie voor Angular 5.
Voor elke RxJS-operator die u importeert, inclusief catchError
, moet u nu importeren vanuit ‘rxjs/operators’ en de pipe-operator gebruiken.
Voorbeeld van een vangfout voor een Http-verzoek Waarneembaar
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) => {
...
}
)
}
...
}
Merk hier op dat catch
wordt vervangen door catchError
en dat de operator pipe
wordt gebruikt om de operatoren op dezelfde manier samen te stellen als wat u gewend bent aan puntketens.
Zie de rxjs-documentatie op pipable(voorheen bekend als verhuurbare) operators voor meer info.
Antwoord 3, autoriteit 4%
In hoek 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');
}