2016-02-24 12 views
9

Ich habe den folgenden Code eine Abfrage-GET-Anforderung in AngularJS zum 2:macht Abfrageanforderung in Angular 2 unter Verwendung von beobachtbaren

makeHtpGetRequest(){ 
      let url ="http://bento/supervisor/info"; 
      return Observable.interval(2000) 
       .map(res => res.json()) //Error here 
       .switchMap(() => this.http.get(url)); 

      /* 
    This portion works well 
    return this.http.get(url) 
       .map(res =>res.json());*/ 
     } 

Typoskript mir einen Fehler gibt die Antwort im JSON-Format machen (check Kommentar in der Code.

TypeError: res.json is not a function 

Überraschenderweise ist es funktioniert seit einiger Zeit, und ich bin nicht sicher, ob ich etwas anderes geändert, aber es funktioniert nicht mehr.

der kommentierte Teil im Code Arbeit s sehr gut.

Antwort

12

Versuchen

return Observable.interval(2000) 
     .switchMap(() => this.http.get(url)) 
     .map(res:Response => res.json()); 
+0

Ich habe das versucht. Es gibt mir immer noch den Fehler. Allerdings macht es die Abfrage in jedem Fall. – user3288346

+0

Dies funktioniert in Chrome, aber nicht in IE11 – Developer

5

Es könnte zu spät sein, aber es könnte noch jemand helfen.

Nach doc

Dies ist nicht Angular eigenes Design. Der Angular HTTP-Client folgt der ES2015-Spezifikation für das Antwortobjekt, das von der Fetch-Funktion zurückgegeben wird. Diese Spezifikation definiert eine json() -Methode, die den Antworttext in ein JavaScript-Objekt zerlegt.

Ich denke, json Funktion gibt es nur in Antwort des http

würde ich

return Observable.interval(2000) 
     .switchMap(() => this.http.get(url).map(res:Response => res.json())); 
2

Was versuchen könnten Sie tun, ist, vergessen Sie nicht zu bereinigen Sie setInveral sonst wird es laufen immer:

let myObservable = new Observable(observer => { 
    let count = 0; 
    let interval = setInterval(() => { 
      observer.next(count++); 
    },2000); 

//disposal function 
return() => { 
    clearInterval(interval); 
} 
}); 


let subscriber = myObservable.subscribe(
    val => console.log(val), 
    err => console.log(err), 
    _ => console.log('done') 
); 

subscriber.unsubscribe(); 
Verwandte Themen