error TS2339: Property 'catchError' does not exist on type 'Observable<any>'

14,236

Solution 1

catchError needs to be imported and then used within .pipe:

import {catchError} from 'rxjs/operators'; 

return this.http.get(this.url)
            .pipe(
              map(this.extractData),
              catchError(this.handleErrorObservable)
            );

Solution 2

You need to use it inside pipe like this:

getBooksWithObservable(): Observable<Book[]> {
  return this.http.get(this.url)
             .pipe(map(this.extractData),catchError(this.handleErrorObservable));
}

Solution 3

catchError must be inside pipe.

 import { Observable, pipe } from 'rxjs';
 import { map, catchError } from 'rxjs/operators';

 getBooksWithObservable(): Observable<Book[]> 
    {
        return this.http.get(this.url)
                .pipe(
                   map(this.extractData),
                   catchError(this.handleErrorObservable)
                 );                    
    }
Share:
14,236
Jitendra Ahuja
Author by

Jitendra Ahuja

A coding Enthusiast, interested in getting and sharing knowledge around.

Updated on June 05, 2022

Comments

  • Jitendra Ahuja
    Jitendra Ahuja almost 2 years

    Here is my code in book.service.ts :

    import { Injectable } from '@angular/core';
    import { Http, Response } from '@angular/http';
    import {Observable} from 'rxjs';
    import { Book } from './book';
    import { map } from "rxjs/operators";
    import { catchError } from 'rxjs/operators';
    
    //import { Component, OnInit } from '@angular/core';
    //import {HttpClient} from "@angular/common/http";
    //import { Observable } from 'rxjs/Observable'; 
    //import 'rxjs/add/operator/map';
    //import 'rxjs/add/operators/catch';
    //import 'rxjs/operators/toPromise';
    
    @Injectable()
    export class BookService 
    {
        url = "http://localhost:4200/assets/data/books.json";
    
        constructor(private http:Http) { }
    
        getBooksWithObservable(): Observable<Book[]> 
        {
            return this.http.get(this.url)
                    .pipe(map(this.extractData))
                    .catchError(this.handleErrorObservable);
        }
        getBooksWithPromise(): Promise<Book[]> 
        {
            return this.http.get(this.url).toPromise()
                .then(this.extractData)
                .catch(this.handleErrorPromise);
        }
        private extractData(res: Response) 
        {
            let body = res.json();
            return body;
        }
        private handleErrorObservable (error: Response | any) 
        {
            console.error(error.message || error);
            //console.log("Error in Observable");
            return Observable.throw(error.message || error);
        }
        private handleErrorPromise (error: Response | any) 
        {
            console.error(error.message || error);
            return Promise.reject(error.message || error);
        }   
    }
    

    And I m getting the Error here:

    ERROR in src/app/book.service.ts(26,18): error TS2339: Property 'catchError' does not exist on type 'Observable'.

    Well the Error is in 26th line and that is :

    .catchError(this.handleErrorObservable); 
    

    I've tried a lot of things but nothing worked... Can anybody solve this?

    Did with 'catch' but didn't work, so then I go for 'catchError' but still, there is this error...

  • Jitendra Ahuja
    Jitendra Ahuja almost 6 years
    Ya got it bro ! done with it ... Thank you so much, btw :-)
  • Krack
    Krack almost 5 years
    path incorrect import {catchError} from 'rxjs/operators
  • Chrillewoodz
    Chrillewoodz almost 5 years
    @Krack Depends which RxJS version you're on.