angular - Observable .catch 不是一个函数

标签 angular rxjs observable rxjs5

从 unix 环境运行我的代码时,我遇到了这个非常烦人的错误。当我通过 ng serve 在本地运行代码时,这工作正常,但是当我将代码部署到我的服务器时,此错误会停止所有程序执行:

ERROR TypeError: this.http.get(...).catch is not a function

谷歌结果表明我应该直接从它们的位置导入 rxjs 命名空间,而不是通过 rxjs/Rx 包,但无论如何我都会收到这个错误。其他结果指出我可能错过了导入 rxjs 运算符,但它们肯定包含在我的案例中。

我什至使用 DevTools 检查了包含的源映射,并且运算符包含在浏览器中。

谁能告诉我为什么会出现此错误?我正在使用 rxjs:^5.5.2

这是我的代码。

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';

@Injectable()
export class MyService {
  constructor(private http: HttpClient) {}

  all(): Observable<any> {
    return this.http.get<any>('url')
      .catch(err => this.handleError(err));
  }
  handleError(error) {
    return Observable.throw(error);
  }
}

编辑 根据@Jota.Toledo 下面的评论,我将提供使用此方法的代码:

this.myService.all().subscribe(
  result => {
    this.isLoading = false;
    if (result) {
      this.clients = result;
    }
  },
  error => this.isLoading = false
);

是不是在subscribe中这样给了两个回调函数,等同于“在添加operator之前某处使用catch方法”?

最佳答案

rxjs 5.5.2 中,您可以使用 lettable 运算符解决此问题,在本例中为 catchError。您必须从 operators 导入它,例如:import { catchError } from 'rxjs/operators/catchError';。一般来说,所有运算符都必须以这种方式导入,对于 observable 也是如此,比如 observable/of

import { catchError } from 'rxjs/operators/catchError';
import { map } from 'rxjs/operators/map';

all(): Observable<any> {
  return this.http.get<any>('url')
    .pipe(
        map(() => //do stuff),
        catchError((error: Error) => {
         //
        })
    )
}

阅读更多关于可出租运营商的信息 here .

关于angular - Observable .catch 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47411594/

相关文章:

Angular 2 : How to use Observable filter

angular - 使用 Angular 2 和 Spring MVC 中的其他表单字段上传文件

angular - 在 Angular 2 单元测试中测试 Promise<string> 值

javascript - rxjs 中棘手的 Steam 可观察合并

angular - 可通过对象 Angular2 观察

angular - 调用函数时清除 Observable 值

javascript - 如何使用 typescript 将json数据转换为pdf格式

javascript - 何时使用 @Input 以及何时不使用 angular2

angular - 检查 ngrx 中可能要加载的列表中是否存在元素

angular - 未完成的可观察对象的 forkJoin 替代方案?