我有一项服务功能:
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()解决方案,但在我的情况下甚至无法编译。 感谢
答案 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}
)
});
}