首页 文章

属性'catch'在类型'Observable<any>'上不存在

提问于
浏览
96

在Angular 2文档页面上有一个使用Http服务的例子 .

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

我克隆了angular2-webpack-starter项目并自己添加了上面的代码 .

我用 Observable 导入了

import {Observable} from 'rxjs/Observable';

我假设属性 Observable 也被导入( .map 工作) . 看一下rxjs.beta-6的更改日志,没有提到 catch .

2 回答

  • 213

    是的,您需要导入运营商:

    import 'rxjs/add/operator/catch';
    

    或者以这种方式导入 Observable

    import {Observable} from 'rxjs/Rx';
    

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

    有关详细信息,请参阅此问题:

  • 49

    对于RxJS 5.5, catch 运算符现已弃用 . 您现在应该将 catchError 运算符与 pipe 结合使用 .

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

    对于您导入的每个RxJS运算符,包括 catchError ,您现在应该从'rxjs/operators'导入并使用管道运算符 .

    Http请求捕获错误的示例Observable

    import { Observable } from 'rxjs';
    import { catchError } from 'rxjs/operators';
    ...
    
    export class ExampleClass {
      constructor(private http: HttpClient) {
        this.http.request(method, url, options).pipe(map(res => res),
          catchError((err: HttpErrorResponse) => {
            ...
          }
        )
      }
      ...
    }
    

    请注意, catchcatchError 替换,而 pipe 运算符用于以与用于点链的方式类似的方式组成运算符 .


    有关详细信息,请参阅pipable(以前称为lettable)运算符上的rxjs文档 .

相关问题