如何使用Rxjs'interval'运算符每隔timeInterval执行Angular 2 http调用?

时间:2016-12-02 13:42:25

标签: angular rxjs

我的服务中有这个简单的方法:

numeroColores()

它返回一个对象流,其中包含有关用户通知的信息。我想使用interval运算符每5秒执行一次这个调用,而不使用setTimeout?

当我尝试这个时:

 notify(userID: string) {
    let _URL = this.baseUrl + '/notification/GetUnseen?userId=' + userID;
     this.datatService.set(_URL);
    return this.datatService.get()
        .flatMap((response) =>
           response.json().slice())
           .distinct();
}

我有错误。 有什么建议吗?

1 个答案:

答案 0 :(得分:2)

notify(userID: string) {
  return Observable.interval(5000)
    .map(() => this.baseUrl + '/notification/GetUnseen?userId=' + userID)
    .switchMap(url => {
      this.dataService.set(url);
      return this.dataService.get();
    })
    .map(response => ....{ <your handler> }
}

一些注意事项: 1.您必须订阅返回的值才能开始通话。 2.您的数据服务是statefull,这可能会创建竞争条件,其中2个不同的客户端设置url然后调用它,考虑将get转换为无状态函数:get(url),在这种情况下,您的代码将是

notify(userID: string) {
  return Observable.interval(5000)
    .map(() => this.baseUrl + '/notification/GetUnseen?userId=' + userID)
    .switchMap(url => this.dataService.get(url))
    .map(response => ....{ <your handler> }
}