2016-02-24 13 views
9

我有以下的代碼,以使在AngularJS 2輪詢GET請求:使輪詢請求可觀察

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

打字稿是給我的錯誤使JSON格式(檢查註釋的響應代碼。

TypeError: res.json is not a function 

出人意料的是,這是工作了一段時間,我不知道如果我改變任何東西,但它停止工作。

註釋的部分代碼工作很好。

回答

12

嘗試

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

我嘗試這樣做。它仍然給我錯誤。但是,無論如何它都會進行輪詢。 – user3288346

+0

這是工作在鉻,但不是在IE11 – Developer

5

它可能爲時已晚,但它仍可能幫助別人。

根據doc

這是沒有棱角的自己的設計。 Angular HTTP客戶端遵循由Fetch函數返回的響應對象的ES2015規範。該規範定義了一個將響應正文解析爲JavaScript對象的json()方法。

我認爲JSON功能只存在於HTTP的響應

我會嘗試

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

你可以做的是,不要忘記清理你setInveral否則將永遠運行下去:

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