2016-07-17 25 views
9

Tôi có dịch vụ đang hoạt động tốt cho đến hôm nay tôi gặp lỗi nàyAngular2 Http với RXJS Loại lỗi quan sát được: this.http.get (...) Bản đồ (...). Catch không phải là chức năng

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

Khi i, m gỡ lỗi mã này nó gặp sự cố khi nói đến phương pháp bắt.

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); 
    } 
    } 

Trả lời

20

Có vẻ như toán tử bắt không được nhập.

Bạn có thể thử để nhập nó như thế này:

import 'rxjs/add/operator/catch' 

Hoặc tổng quát hơn này nếu bạn muốn có phương pháp hơn cho quan sát:

import 'rxjs/Rx'; 

Xem câu hỏi này:

+0

Nó hoạt động! cảm ơn. Thật điên rồ khi tôi có tập tin «import» rxjs/Rx' trong tập tin nhà cung cấp nơi tôi nhập các phụ thuộc khác của tôi cũng cho angular2, nhưng tôi tin rằng tôi cần phải nhập thư viện này vào mỗi tập tin mà tôi muốn sử dụng hoặc trong chính. ts. –

+0

@Thierry, dường như việc nhập toàn bộ rxjs/Rx là không tốt. Bạn có nghĩ rằng đó không phải là một cải tiến để chỉ nhập các toán tử mà bạn cần? –

0

tôi đã cùng một vấn đề nhưng trong trường hợp của tôi vấn đề đã được, tôi đã yêu cầu nhập khẩu các module nhiều lần trong Module.ts

0

Các 'O' nhân vật trong 'rxjs/O bservable' phải Trường hợp trên.

Chỉ định trong trường hợp thấp hơn 'o', sẽ cung cấp cho bạn lỗi này và các lỗi ma quái khác. Điều này phải được nhập như sau:

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

Tôi mất một giờ để tìm thấy. Khi sử dụng nhập khẩu, nói chung, các tên trong trường hợp thấp hơn. Đây là lần đầu tiên tôi thấy điều này. Tôi hy vọng nó sẽ giúp những người khác :)

Các vấn đề liên quan