Na stronie dokumentacji Angular 2 dotyczącej korzystania z usługi HTTP znajduje się przykład.
getHeroes (): Observable<Stuff[]> {
return this.http.get(this.url)
.map(this.extractData)
.catch(this.handleError);
}
Sklonowałem projekt angular2-webpack-starter i sam dodałem powyższy kod.
Importowałem Observable
za pomocą
import {Observable} from 'rxjs/Observable';
Zakładam, że właściwości Observable
są również importowane ( .map
działa). Przejrzał dziennik zmian rxjs.beta-6 i nic o nim nie wspomniano catch
.
javascript
angular
typescript
rxjs
BrianRT
źródło
źródło
import {Observable} from 'rxjs/Observable';
? Wydaje mi się to bardziej intuicyjne.rxjs/Observable
Moduł nie importuje operatorów, ponieważ istnieje wiele podmiotów. Dorxjs/Rx
importu modułu wszystko ... Myślę, że jest to wybór projektu.W wersji RxJS 5.5+
catch
operator jest przestarzały. Powinieneś teraz używaćcatchError
operatora w połączeniu zpipe
.Dla każdego importowanego operatora RxJS, w tym
catchError
należy teraz importować z „rxjs / operatorzy” i używać operatora potoku.Przykład wychwytywania błędu dla żądania HTTP Observable
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) => { ... } ) } ... }
Zwróć uwagę, że
catch
jest on zastąpiony przezcatchError
ipipe
operator jest używany do tworzenia operatorów w podobny sposób do tego, do czego jesteś przyzwyczajony z łańcuchem kropek.Zobacz dokumentację rxjs na temat operatorów pipable (wcześniej znanych jako lettable ), aby uzyskać więcej informacji.
źródło
map(res => res)
wymagane?pipe
funkcja RxJS umożliwia połączenie wielu funkcji w jedną funkcję. Funkcja pipe () przyjmuje jako argumenty funkcje, które chcesz połączyć, i zwraca nową funkcję, która po wykonaniu uruchamia złożone funkcje w kolejności. To mapowanie nic nie robi, ponieważ jest technicznie funkcją tożsamości.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'); }
źródło