web-dev-qa-db-fra.com

Angular2 Http avec RXJS Observable TypeError: this.http.get (...). Map (...). Catch n’est pas une fonction

J'ai suivi le service qui fonctionnait bien jusqu'à aujourd'hui j'ai eu cette erreur

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

Lorsque je débogue ce code, il se bloque lorsqu'il est question de la méthode catch 

import { Test } from "./home.component";
import { Injectable }     from "@angular/core";
import { Inject } from "@angular/core";
import { Http , Response  } from "@angular/http";
import { Observable }     from "rxjs/Observable";

@Injectable()
export class HomeService {
   public constructor(@Inject(Http)  private http: Http) {}

   public getData (): Observable<Test []> {
        return this.http.get("./src/app/home/home-data.json")
            .map(this.extractData).catch(this.handleError);
    }

    public extractData(res: Response) {
        let body = res.json();
        return body.data || { };
    }

    public handleError (error: any) {
        // In a real world app, we might use a remote logging infrastructure
        // We"d also Dig deeper into the error to get a better message
        let errMsg = (error.message) ? error.message :
            error.status ? `${error.status} - ${error.statusText}` : "Server error";
        console.error(errMsg); // log to console instead
        return Observable.throw(errMsg);
    }
  }
11
Jorawar Singh

Il semble que l'opérateur de capture n'est pas importé.

Vous pouvez essayer de l'importer comme ceci:

import 'rxjs/add/operator/catch'

Ou plus généralement ceci si vous voulez avoir plus de méthodes d'observables:

import 'rxjs/Rx';

Voir cette question:

25
Thierry Templier

Le caractère 'O' dans 'rxjs /Observable' doit être Majuscule .

Le spécifier en minuscule ' o ' vous donnera ceci et d'autres erreurs fantasmagoriques . Cela doit être importé comme ceci:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';

Il m'a fallu une heure pour le trouver . Lors de l'utilisation de l'import, les noms sont généralement en minuscules .. )

0
Recev Yildiz

J'avais le même problème, mais dans mon cas, j'avais importé plusieurs fois les modules requis dans Module.ts