【发布时间】:2017-03-06 16:18:40
【问题描述】:
我想为我的 angular2 网站构建一个 heatbeat 服务。远程设备是网站的主机,客户端应该能够检测到设备是否不可访问/离线。 该服务应定期轮询(网络服务器)远程设备。
我知道一个失败的 HTTP-Call 不能直接等同于整个设备的在线/离线状态,但对于我的要求应该足够了。
目前我正在使用以下放置在角度服务中的 Observable:
public getStatus() {
return this.http.get(this.config.apiEndpoint + this.fileName)
.map(() => { return '1'; })
.timeout(500)
.catch(() => {return '0';})
.retry()
.delay(1500)
.repeat();
}
observable 的目标只是网络服务器上一个几乎空的文件。 组件订阅 observable/service,然后在设备状态发生变化时显示通知。
原则上,Observable 可以工作,但它为订阅它的组件提供连续的 1(在线)和 0(离线)流。现在我必须向组件(以及使用此服务的每个其他组件)添加一些逻辑来处理例如两个连续的零,即通知只显示一次。
如果服务可以做这些额外的工作,并且只在设备状态发生变化时(向组件)提供结果,那将会更加清晰和更好地分离关注点。我还尝试将Observable.timer 与flatMap 一起使用,但未能使其正常工作,但我希望rxjs 能够解决这个问题。
【问题讨论】:
标签: angular typescript observable rxjs5