每两分钟运行一次http呼叫

时间:2017-07-13 10:33:46

标签: angular http rxjs

我有一项服务功能:

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

我在组件中订阅了这个Observable,如下所示:

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()解决方案,但在我的情况下甚至无法编译。 感谢

2 个答案:

答案 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.

答案 1 :(得分: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}
        )
    });
}