角度6:类型'Observable <response>'不存在属性'catch'吗?

时间:2018-06-21 11:20:49

标签: angular rxjs angular6 rxjs6 angular-observable

我正在将我的应用升级到 Angular 6 。我正在从 Angular 4 升级,但是下面的代码在Angular 6中导致错误,在Angular 4中可以正常工作。


我得到的错误:

  

属性“ of”在类型“可观察的类型”上不存在

     

错误:“可观察”类型不存在属性“捕获”

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

  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);
      }
    });
  }

8 个答案:

答案 0 :(得分:37)

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

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

account

答案 1 :(得分:3)

import 'rxjs/add/operator/catch';

或以这种方式导入Observable:

import {Observable} from 'rxjs';

答案 2 :(得分:2)

我假设您已经迁移到RXJS6,因为您也已经迁移到angular6。

在RXJS6中,使用catch错误代替here中看到的catch

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

答案 3 :(得分:2)

使用以下方法导入库并重新排列代码

import { catchError } from 'rxjs/operators';
return Observable.pipe(catchError =>...);

这对我有用。

答案 4 :(得分:1)

需要导入catch操作符

import 'rxjs/add/operator/catch';

答案 5 :(得分:1)

您将需要导入所有正在使用的运算符。

import 'rxjs/add/observable/of';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/catch';

答案 6 :(得分:0)

这对我有用,我正在使用Angular 6.1.0。

import { Observable, Subject, of } from 'rxjs';
import { switchMap, debounceTime, distinctUntilChanged, catchError } from 'rxjs/operators';

this.ofertas = this.subjectPesquisa // Retorno Oferta[]
  .pipe(debounceTime(1000)) // Executa a ação do switchMap após 1 segundo
  .pipe(distinctUntilChanged()) // Apenas executa a ação switchMap se o termo enviado for outro
  .pipe(switchMap((termo: string) => {

    if (termo.trim() === '') {
      // Retornar um observable de array de ofertas vazio.
      return of<Oferta[]>([]);
    }

    console.log('Requisição HTTP para api: ', termo);
    return this.ofertasService.pesquisaOfertas(termo);
  }))
  .pipe(catchError((err: any) => {
    console.log('Erro: ', catchError);
    return of<Oferta[]>([]);
  }));

答案 7 :(得分:0)

首先使用以下命令安装rxjs软件包

npm i rxjs-compat

然后使用

导入库
import 'rxjs/add/operator/catch';

或以这种方式导入Observable:

import {Observable} from 'rxjs/Rx';

但是在这种情况下,您将导入所有运算符。

从以下链接获得 https://code-examples.net/en/q/235b329