Ich habe RXJS 5 verwendet, jetzt, da ich ein Upgrade auf 6 vorgenommen habe, habe ich einige Probleme.
Früher war ich in der Lage, catch zu nutzen, aber per Update wird catch nun mit catchError (with in the pipe) ersetzt, wie nun endlich?
Ich habe auch einige Fragen:
Muss ich throw-> throwError ändern (in unterem Code Observable.throw (err);)
import { Observable, Subject, EMPTY, throwError } from "rxjs";
import { catchError } from 'rxjs/operators';
return next.handle(clonedreq).pipe(
catchError((err: HttpErrorResponse) => {
if ((err.status == 400) || (err.status == 401)) {
this.interceptorRedirectService.getInterceptedSource().next(err.status);
return Observable.empty();
} else {
return Observable.throw(err);
}
})
//, finally(() => {
// this.globalEventsManager.showLoader.emit(false);
//});
);
Wie benutze ich publish (). RefCount () jetzt?
verwenden Sie throwError
anstelle von Observable.throw
, siehe https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md#observable-classes
finally
wurde in finalize
umbenannt und wird in pipe()
unter anderen Operatoren verwendet.
dasselbe mit publish()
und refCount()
. Beide Operatoren werden in pipe()
verwendet.
Finalize von RXJS/Operatoren importieren
import { finalize } from 'rxjs/operators
Dann wird finalize in der pipe()
verwendet,
observable()
.pipe(
finalize(() => {
// Your code Here
}
)
).subscribe()
Laut offiziellem Dokument sollten Sie Ihren Code folgendermaßen ändern, um einen Kompilierungsfehler zu vermeiden: (Sie müssen eine Ausnahme in der Methode catchError
auslösen. Die Methode finalize
callback hat kein Argument.)
import { catchError, finalize } from 'rxjs/operators';
return next.handle(clonedreq).pipe(
catchError(error => {
console.log('error occured:', error);
throw error;
}),
finalize(() => {
console.log('finalize')
})
);
Es wurde erfolgreich in Angular CLI: 7.1.4.
kompiliert.