Angular 6: 属性 'catch' 在类型 'Observable<Response>' 上不存在?
Angular 6: Property 'catch' does not exist on type 'Observable<Response>'?
我正在将我的应用程序升级到 Angular 6。我正在从 Angular 4 升级,但下面的代码在 Angular 6 中导致错误,而在 Angular 4 中它工作正常。
我遇到的错误:
Property 'of' does not exist on type 'typeof Observable'
Error: Property 'catch' does not exist on type 'Observable'
我应该如何解决这些错误?
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);
}
});
}
需要导入 catch 运算符
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/catch';
或者这样导入 Observable:
import {Observable} from 'rxjs';
您需要导入您正在使用的所有运算符。
import 'rxjs/add/observable/of';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/catch';
既然你标记了你的问题 rxjs6,我假设升级到 Angular6 包括升级到 rxjs6。在那种情况下,它不起作用,因为可观察对象上的方法现在是独立的运算符,您可以使用 pipe() 应用它们。此外,进口也发生了变化。有关详细信息,请参阅 migration guide。
使用 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);
}
})
);
}
我假设你已经迁移到 RXJS6,因为你也迁移到了 angular6。
在 RXJS6 中使用 catch Error 而不是 catch here
import {catchError } from 'rxjs/operators';
import { Observable, of } from 'rxjs';
使用以下方法导入库并重新排列代码
import { catchError } from 'rxjs/operators';
return Observable.pipe(catchError =>...);
这对我有用。
这对我有用,我正在使用 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[]>([]);
}));
首先使用下面的命令安装 rxjs 包
npm i rxjs-compat
然后使用
导入库
import 'rxjs/add/operator/catch';
或者这样导入 Observable:
import {Observable} from 'rxjs/Rx';
但在这种情况下,您导入所有运算符。
从下面得到 link
https://code-examples.net/en/q/235b329
我正在将我的应用程序升级到 Angular 6。我正在从 Angular 4 升级,但下面的代码在 Angular 6 中导致错误,而在 Angular 4 中它工作正常。
我遇到的错误:
Property 'of' does not exist on type 'typeof Observable'
Error: Property 'catch' does not exist on type 'Observable'
我应该如何解决这些错误?
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);
}
});
}
需要导入 catch 运算符
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/catch';
或者这样导入 Observable:
import {Observable} from 'rxjs';
您需要导入您正在使用的所有运算符。
import 'rxjs/add/observable/of';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/catch';
既然你标记了你的问题 rxjs6,我假设升级到 Angular6 包括升级到 rxjs6。在那种情况下,它不起作用,因为可观察对象上的方法现在是独立的运算符,您可以使用 pipe() 应用它们。此外,进口也发生了变化。有关详细信息,请参阅 migration guide。
使用 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);
}
})
);
}
我假设你已经迁移到 RXJS6,因为你也迁移到了 angular6。
在 RXJS6 中使用 catch Error 而不是 catch here
import {catchError } from 'rxjs/operators';
import { Observable, of } from 'rxjs';
使用以下方法导入库并重新排列代码
import { catchError } from 'rxjs/operators';
return Observable.pipe(catchError =>...);
这对我有用。
这对我有用,我正在使用 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[]>([]);
}));
首先使用下面的命令安装 rxjs 包
npm i rxjs-compat
然后使用
导入库import 'rxjs/add/operator/catch';
或者这样导入 Observable:
import {Observable} from 'rxjs/Rx';
但在这种情况下,您导入所有运算符。
从下面得到 link https://code-examples.net/en/q/235b329