angular – Observable .catch不是一个函数

前端之家收集整理的这篇文章主要介绍了angular – Observable .catch不是一个函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从unix环境运行我的代码时,我遇到了这个非常烦人的错误.当我通过ng服务本地运行代码时,这工作正常,但是当我将代码部署到我的服务器时,此错误会停止所有程序执行:

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

谷歌的结果表明我应该直接从他们的位置导入rxjs名称空间,而不是通过rxjs / Rx包,但是我得到这个错误.其他结果指出我可能错过了导入rxjs运算符,但它们肯定包含在我的情况中.

我甚至使用DevTools检查了包含的源图,并且操作符包含在浏览器中.

谁能告诉我为什么我会收到这个错误?我正在使用rxjs:^ 5.5.2

这是我的代码.

  1. import { Injectable } from '@angular/core';
  2. import { HttpClient } from '@angular/common/http';
  3. import { Observable } from 'rxjs/Observable';
  4. import 'rxjs/add/operator/catch';
  5. import 'rxjs/add/observable/throw';
  6.  
  7. @Injectable()
  8. export class MyService {
  9. constructor(private http: HttpClient) {}
  10.  
  11. all(): Observable<any> {
  12. return this.http.get<any>('url')
  13. .catch(err => this.handleError(err));
  14. }
  15. handleError(error) {
  16. return Observable.throw(error);
  17. }
  18. }

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

  1. this.myService.all().subscribe(
  2. result => {
  3. this.isLoading = false;
  4. if (result) {
  5. this.clients = result;
  6. }
  7. },error => this.isLoading = false
  8. );

订阅中给出两个回调函数,就像在添加运算符之前“在某处使用catch方法”一样?

在rxjs 5.5.2中,您可以使用lettable运算符解决此问题,在本例中为catchError.您必须从以下运算符导入它:import {catchError} from’rxjs / operators / catchError’;.一般来说,所有运算符都必须以这种方式导入,同样的东西也是可观察的,如observable /.
  1. import { catchError } from 'rxjs/operators/catchError';
  2. import { map } from 'rxjs/operators/map';
  3.  
  4. all(): Observable<any> {
  5. return this.http.get<any>('url')
  6. .pipe(
  7. map(() => //do stuff),catchError((error: Error) => {
  8. //
  9. })
  10. )
  11. }

阅读更多关于可租赁操作符here的信息.

猜你在找的Angularjs相关文章