Angular2 Http with RXJS Observable TypeError:this.Http.get(.



我有以下服务,直到今天我都能正常工作,我收到了这个错误

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

当我调试此代码时,当涉及到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);
    }
  }

catch操作符似乎没有导入。

你可以试着这样导入:

import 'rxjs/add/operator/catch'

或者更一般地说,如果你想有更多的可观测方法:

import 'rxjs/Rx';

请参阅此问题:

  • Angular 2 HTTP GET出现TypeScript错误HTTP.GET(…).map不是[null]中的函数

我遇到了同样的问题,但在我的情况下,问题是,我在Module.ts 中多次导入Required模块

'rxjs/Oobservable'中的'O'字符必须是大写

用小写"o"指定它,会出现此错误和其他可怕的错误。这必须像这样导入:

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

我花了一个小时才找到它。使用import时,名称通常使用小写。这是我第一次看到这个。我希望它能帮助其他人:)