web-dev-qa-db-fra.com

Angular: comment appeler finally () avec RXJS 6

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?

16
Sunil Kumar
22
martin

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()
13
20B2

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.

0