2016-02-24 21 views
9

ho il seguente codice per effettuare una richiesta GET elettorale a AngularJS 2:Fare richiesta di polling in angolare 2 utilizzando Osservabile

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());*/ 
     } 

dattiloscritto mi sta dando un errore rendere la risposta in formato JSON (check commentare nel codice.

TypeError: res.json is not a function 

Sorprendentemente, si stava lavorando da tempo e non sono sicuro se ho cambiato niente altro, ma ha smesso di funzionare.

la parte commentato nel lavoro di codice s molto bene.

risposta

12

Prova

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

Ho provato questo. Mi dà ancora l'errore. Tuttavia, fa il sondaggio in ogni caso. – user3288346

+0

Funziona in chrome ma non in IE11 – Developer

5

Potrebbe essere troppo tardi, ma potrebbe ancora aiutare qualcuno.

Secondo doc

Questo non è proprio disegno di angolare. Il client HTTP angolare segue la specifica ES2015 per l'oggetto risposta restituito dalla funzione di recupero. Quella specifica definisce un metodo json() che analizza il corpo della risposta in un oggetto JavaScript.

Penso funzione JSON esiste solo nella risposta di http

vorrei provare

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

cosa si potrebbe fare è, non dimenticate di pulizia si setInveral altrimenti sarà correre per sempre:

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(); 
Problemi correlati