Angular : 如何使用 RXJS 6 调用 finally()

Angular : how to call finally() with RXJS 6

我之前使用的是 RXJS 5,现在升级到 6,我遇到了一些问题。

以前我可以使用 catch 和 finally,但是根据更新,catch 被替换为 catchError(在管道中)现在如何使用 finally?

我还有一些问题:

我需要更改 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() ?

需要从 rxjs/operators 导入 finalize

import { finalize } from 'rxjs/operators';

然后finalize里面用到了pipe(),

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

According to official document,您应该像这样更改代码以避免编译错误:(您必须在 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.

编译成功