web-dev-qa-db-ja.com

Angular:RXJS 6でfinally()を呼び出す方法

RXJS 5を6にアップグレードして使用していたので、いくつかの問題に直面しています。

以前はcatchを使用できましたが、最終的にcatchがcatchErrorに置き換えられました(パイプ内で)今、最終的に使用する方法は?

また、いくつか質問があります:

Throw-> throwErrorを変更する必要がありますか(以下のコードでは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);
        //});
      );

また、今すぐpublish()。refCount()を使用する方法は?

20
Sunil Kumar
29
martin

rxjs/operatorsからfinalizeをインポートする必要があります。

import { finalize } from 'rxjs/operators';

次に、pipe()内でfinalizeが使用されます。

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

公式ドキュメントによれば 、コンパイルエラーを避けるために、次のようにコードを変更する必要があります(catchErrorメソッドで例外をスローする必要があります。finalizeコールバックメソッドには引数がありません。)

import { catchError, finalize } from 'rxjs/operators';

return next.handle(clonedreq).pipe(
  catchError(error => {
    console.log('error occured:', error);
    throw error;
  }),
  finalize(() => {
    console.log('finalize')
  })
);

Angular CLI: 7.1.4.で正常にコンパイルされます