J'utilisais RXJS 5, maintenant que je l'ai mis à niveau à 6, je suis confronté à des problèmes.
Auparavant, je pouvais utiliser catch et finalement, mais comme par mise à jour, catch est remplacé par catchError (avec dans le tuyau), comment utiliser enfin?
Aussi j'ai quelques questions:
Ai-je besoin de changer throw-> throwError (dans le code ci-dessous, 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);
//});
);
Aussi, comment utiliser publish (). RefCount () maintenant?
utilisez throwError
au lieu de Observable.throw
, voir https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md#observable-classes
finally
a été renommé en finalize
et vous l'utiliserez dans pipe()
parmi d'autres opérateurs.
idem avec publish()
et refCount()
. Les deux sont des opérateurs que vous utiliserez dans pipe()
.
Besoin d'importer finaliser à partir de rxjs/opérateurs
import { finalize } from 'rxjs/operators
Puis finaliser est utilisé dans la pipe()
,
observable()
.pipe(
finalize(() => {
// Your code Here
}
)
).subscribe()
Selon le document officiel , vous devez modifier votre code comme suit pour éviter les erreurs de compilation: (Vous devez générer une exception dans la méthode catchError
. La méthode finalize
callback ne comporte aucun 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')
})
);
Il a été compilé avec succès dans Angular CLI: 7.1.4.