我的服务中有这个简单的方法:
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();
}
我有错误。 有什么建议吗?
答案 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> }
}