当前位置: 首页 > 知识库问答 >
问题:

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

慕容光启
2023-03-14

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

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

我克隆了angular2 webpack初学者项目,并自己添加了上述代码。

我导入观察使用

import {Observable} from 'rxjs/Observable';

我假设属性可观察的也被导入(. map起作用)。查看了rxjs.beta-6的更改日志,没有提到任何关于catch的内容。

共有3个答案

仲孙焱
2023-03-14

在角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');
  }
陆俊智
2023-03-14

在RxJS 5.5中,catch操作符现在已不推荐使用。现在,您应该将catchError操作符与pipe结合使用。

rxjsv5。5.2是Angular 5的默认依赖版本。

对于您导入的每个RxJS操作符,包括catchError,您现在应该从“RxJS/operators”导入并使用管道操作符。

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) => {
        ...
      }
    )
  }
  ...
}

请注意,catch被替换为catchError,而pipe操作符用于以与点链接类似的方式组合操作符。

有关更多信息,请参阅Pipable(以前称为lettable)运算符上的rxjs留档。

饶铭
2023-03-14

警告:自Angular 5.5以来,此解决方案已被弃用,请参考下面Trent的答案

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

是的,您需要导入运算符:

import 'rxjs/add/operator/catch';

或者通过以下方式导入可观察的

import {Observable} from 'rxjs/Rx';

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

有关更多详细信息,请参见此问题:

  • Angular HTTP GET与TypeScript错误http.get(...). map不是一个函数在[null]
 类似资料:
  • 我使用“angular2网页包”和“angular2/表格,可见”,但遇到错误,需要帮助。。 有一个自定义表单验证程序-- 我可以找到文件"/projection_direction/node_modules/rxjs/操作员/DebounceTime.js" 为什么会有这样的错误- 类型“Observable”上不存在属性“debouceTime”。

  • 升级到Angular 6.0和Rxjs到6.0后,我收到以下编译错误:

  • 嗨,我正在使用Angular 2 final和router 3.0。我想过滤从 我想做的是: 可以是instanceOf,或,但我只想要。但是我得到一个错误

  • 我得到这个错误: 属性'toPromise'不存在于类型'观察'. any中

  • 我在尝试创建将keyup事件转换为可观察流时遇到问题。 我正在学习Ng书籍第6版。我被困在一个示例中,在您键入时搜索YouTube视频。当搜索返回时,我们将显示视频缩略图结果列表,以及每个视频的描述和链接。 因此,我们使用observable.from事件:https://github.com/NiLinli/ng-book2-angular-6-r68-code-samples/blob/mas

  • 在使用rxjs的角度2中,我试图将promise转换为可观察的。正如许多在线指南所显示的,我在上使用了。其中抛出错误: Observable的导入方式如下: 尝试导入像其他运算符一样会导致错误: 即使我抑制了typescript错误,它仍然会导致错误: 错误: rxjs回购协议中也报告了类似的问题,但也没有解决方案。