属性“ catch”不存在于类型“ Observer able < any >”上

在使用 Http 服务的 Angular 2文档页面上,有一个示例。

getHeroes (): Observable<Stuff[]> {
return this.http.get(this.url)
.map(this.extractData)
.catch(this.handleError);
}

我克隆了 角度2-网包起动器项目并自己添加了上面的代码。

我导入 Observable使用

import {Observable} from 'rxjs/Observable';

我假设也导入了属性 Observable(.map工作)。查看 rxjs.beta-6的变更日志,没有提到 catch

117967 次浏览

警告 : 此解决方案由于角度5.5而被弃用,请参考下面 Trent 的回答

=====================

是的,您需要导入操作员:

import 'rxjs/add/operator/catch';

或者以这种方式导入 Observable:

import {Observable} from 'rxjs/Rx';

但在本例中,您导入所有运算符。

更多细节见下面的问题:

对于 RxJS 5.5 + ,现在不推荐使用 catch操作符。

RxJS v5.5.2是 Angular 5的默认依赖版本。

对于导入的每个 RxJS 操作符(包括 catchError) ,现在应该从‘ RxJS/Operator’导入并使用管道操作符。

捕获 Http 请求 Observer 的错误示例

import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';
...


export class ExampleClass {
constructor(private http: HttpClient) {
this.http.request(method, url, options).pipe(
catchError((err: HttpErrorResponse) => {
...
}
)
}
...
}

请注意,这里用 catchError替换了 catch,并且使用 pipe操作符以与点链接相似的方式组合操作符。


有关更多信息,请参见关于 可行(以前称为 可以出租)运算符的 rxjs 文档。

角度8:

//for catch:
import { catchError } from 'rxjs/operators';


//for throw:
import { Observable, throwError } from 'rxjs';


//and code should be written like this.


getEmployees(): Observable<IEmployee[]> {
return this.http.get<IEmployee[]>(this.url).pipe(catchError(this.erroHandler));
}


erroHandler(error: HttpErrorResponse) {
return throwError(error.message || 'server Error');
}