webentwicklung-frage-antwort-db.com.de

Angular: Wie rufe ich endlich () mit RXJS 6 auf

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?

16
Sunil Kumar
22
martin

Finalize von RXJS/Operatoren importieren

import { finalize } from 'rxjs/operators

Dann wird finalize in der pipe() verwendet,

observable()
    .pipe( 
         finalize(() => {
              // Your code Here
         }
     )
).subscribe()
13
20B2

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.