首页 > 解决方案 > Angular 6:“Observable”类型上不存在属性“catch”'?

问题描述

我正在将我的应用程序升级到Angular 6。我正在从Angular 4升级,但下面的代码在 Angular 6 中导致错误,它在 Angular 4 中运行良好。


我得到的错误:

“typeof Observable”类型上不存在属性“of”

错误:“Observable”类型上不存在属性“catch”

我应该如何解决这些错误?

  private authInterceptor(observable: Observable<Response>): Observable<Response> {
    return observable.catch((error, source) => {
      if (error.status == 401) {
        this.router.navigateByUrl('/login');
        return Observable.of();
      } else {
        return Observable.throw(error);
      }
    });
  }

标签: angularrxjsangular6rxjs6angular-observable

解决方案


由于您标记了您的问题 rxjs6,我假设升级到 Angular 6 包括升级到 rxjs6。在这种情况下,它不起作用,因为可观察对象上的方法现在是可以使用 pipe() 应用的独立运算符。此外,进口也发生了变化。有关更多详细信息,请参阅迁移指南

使用 rxjs6 它应该看起来像这样:

import { Observable, EMPTY, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';

private authInterceptor(observable: Observable<Response>): Observable<Response> {
   return observable.pipe(
       catchError( err => {
            if (err.status == 401) {
                this.router.navigateByUrl('/login');
                return EMPTY;
            } else {
                return throwError(err);
            }
       })
   );
 }

推荐阅读