2016-02-24 10 views
9

Mam następujący kod do dokonania odpytywania GET wniosek w angularjs 2:Making prośba odpytywania w Kątowymi 2 stosując Obserwowalne

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

maszynopis daje mi błąd uczynić odpowiedź w formacie JSON (sprawdź komentarz w kod.

TypeError: res.json is not a function 

Niespodziewanie pracował przez jakiś czas i nie jestem pewien, czy zmieniłem niczego innego, ale przestał działać.

komentowanym udział w pracach kodu bardzo dobrze.

Odpowiedz

12

Spróbuj

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

Próbowałem tego. Nadal daje mi błąd. Jednak w każdym przypadku odbywa się głosowanie. – user3288346

+0

To działa w chrome, ale nie w IE11 – Developer

5

To może być za późno, ale może jeszcze komuś pomóc.

Według doc

To nie jest własny projekt kanciasty za. Angularny klient HTTP jest zgodny ze specyfikacją ES2015 dla obiektu odpowiedzi zwróconego przez funkcję Fetch. Ta specyfikacja definiuje metodę json(), która analizuje ciało odpowiedzi w obiekcie JavaScript.

myślę funkcja json istnieje tylko w odpowiedzi HTTP

chciałbym spróbować

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

Co można zrobić, to nie zapomnij do czyszczenia ty setInveral inaczej to będzie działać zawsze:

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