2016-07-17 8 views
9

मैं सेवा जो ठीक काम कर रहा था, जब तक आज मैं यह त्रुटि आई निम्नलिखित है नहीं हैAngular2 RXJS प्रत्यक्ष लेखन त्रुटि के साथ Http:।। This.http.get (...) मानचित्र (...) पकड़ एक समारोह

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

जब मैं इस कोड को डीबग कर रहा हूं तो यह कैच विधि की बात आती है।

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

उत्तर

20

ऐसा लगता है कि कैच ऑपरेटर आयात नहीं किया जाता है।

आप इस तरह यह आयात करने का प्रयास कर सकते हैं:

import 'rxjs/add/operator/catch' 

या अधिक आम तौर पर इस अगर आप observables के लिए और अधिक तरीकों करना चाहते हैं:

+0

यह काम किया! धन्यवाद। यह पागल है कि मेरे पास मेरे विक्रेताओं फ़ाइल में यह 'आयात' आरएक्सजे/आरएक्स' है जहां मैं अपनी अन्य निर्भरताओं को कोणीय 2 के लिए भी आयात करता हूं, लेकिन मेरा मानना ​​है कि मुझे इस पुस्तकालय को प्रत्येक फ़ाइल में आयात करने की आवश्यकता है जहां मैं इसे या मुख्य में उपयोग करना चाहता हूं। ts। –

+0

@ थिएरी, स्पष्ट रूप से पूरे आरएक्सजे/आरएक्स आयात करना अच्छा अभ्यास नहीं है। क्या आपको लगता है कि आपको केवल उन ऑपरेटरों को आयात करने में सुधार नहीं है जिन्हें आपको चाहिए? –

0

मैं एक ही मुद्दा था, लेकिन मेरे मामले में समस्या था, मैं आयात कई बार Module.ts में

0

'हे' चरित्र में आवश्यक था मॉड्यूल 'rxjs/हे bservable' होना चाहिए ऊपरी केस

इसे कम मामले '' में निर्दिष्ट करना, आपको यह और अन्य डरावनी त्रुटियां देगा। यह इस तरह आयात किया जाना चाहिए:

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

यह मुझे एक घंटे में यह पता लगाने के लिए ले लिया। आयात का उपयोग करते समय, आम तौर पर, नाम कम मामले में होते हैं। यह पहली बार है जब मैं इसे देख रहा हूं। मुझे उम्मीद है कि यह दूसरों की मदद करेगा :)

संबंधित मुद्दे