2017-07-13 56 views
0

我與功能的服務:運行HTTP調用每兩分鐘

fetchChatCirclesFromServer(): Observable<Response> { 
    return this.http.post(
     this.apiurl + '/chat-circle/getChatCircles', 
     {user: {loc: {lat: this.lat, lng: this.lng}}}, 
     {headers: this.headers} 
    ) 
    } 

我簽署這項可觀察的成分,像這樣:

ngOnInit() { 
    this.chatCircleService.fetchChatCirclesFromServer() 
    .subscribe(resp => { 
    this.chatCircles = resp.json().chatCircle 
    this.chatCircleService.joinChatCircle(this.chatCircles[0].id) 
    }) 
} 

我怎麼能改造fetchChatCirclesFromServer ()函數,以便它調用http.post每2分鐘將響應發回組件。 我已經嘗試過Observable.interval()。timeInterval()解決方案張貼在類似的問題,但是甚至沒有編譯在我的情況。 感謝

+0

爲什麼不編譯?你得到什麼錯誤?什麼是時間間隔解決方案的實施? – onetwo12

回答

0

嘗試

fetchChatCirclesFromServer(): Observable<Response> { 
    return Rx.Observable.interval(120000).flatMap(() => { 
     return this.http.post(
      this.apiurl + '/chat-circle/getChatCircles', 
      {user: {loc: {lat: this.lat, lng: this.lng}}}, 
      {headers: this.headers} 
     ) 
    }); 
} 
+0

這是編譯,但在Chrome控制檯上,即使在導入'rxjs/observable/interval'後,它的拋出錯誤是Observable.interval不是函數。還有什麼我不得不導入? –

+0

感謝它現在的工作。 –

1
ngOnInit() { 
    Observable.timer(0, 120000) // starting immediately, calling every 120seconds (or 2 minutes) 
    .switchMap(() => this.chatCircleService.fetchChatCirclesFromServer()) // then switch to the request-stream from the service 
    .subscribe(resp => { 
     this.chatCircles = resp.json().chatCircle 
     this.chatCircleService.joinChatCircle(this.chatCircles[0].id) 
     }) 
} 

注1:不要忘記關閉訂閱的情況下,你的組件在應用程序運行過程中的任何點被刪除。

注2.interval(n: number)不會立即發出,但只有第一個間隔之後,在這種情況下,這將是在2分鐘後,而用timer(initialDelay, interval)你可以自定義一個初始延遲,這你可以設置爲0

+0

這是編譯正確,但是鉻控制檯拋出錯誤說即使從'rxjs/Observable'和'rxjs/observable/timer'導入{Observable}後,定時器不是observable的函數。還有什麼我需要導入? –

+0

謝謝,現在工作 –

+0

'import「rxjs/add/observable/timer」;' – olsn