【问题标题】:Angular : how to call finally() with RXJS 6Angular:如何使用 RXJS 6 调用 finally()
【发布时间】:2018-12-14 00:45:25
【问题描述】:

我使用的是 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() ?

【问题讨论】:

    标签: angular rxjs angular6 rxjs6


    【解决方案1】:

    【讨论】:

    • 你能告诉我如何在“readonly notification$: Observable = this._notification.asObservable().pipe(publish());”中使用带有引用计数的发布
    • .pipe(publish(), refCount())
    • 从 RxJS 6 开始,所有的操作符都是函数。在 RxJS 5 之前,运算符是 Observable 类上的方法。
    【解决方案2】:

    需要从rxjs/operators导入finalize

    import { finalize } from 'rxjs/operators';

    然后在pipe()里面使用finalize,

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

    【讨论】:

    • finalize 没有参数。
    【解决方案3】:

    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.编译成功

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 2018-10-20
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多