我有一个Angualr 7应用程序,总共20个传感器数据。我想每隔5秒使用可观察到的选定传感器ID接收数据。例如;
var sensorId = ""; // dynamically selected from the web UI
var sensorData$ = interval(5000).pipe()
sensorData$.subscribe() // etc..
我将选择多个传感器,并开始使用间隔订阅来获取数据。我如何保持这些观测值?我该如何管理?
另外,我可以随时添加任何传感器。
最佳答案
我建议使用Subject和mergeMap。
作为说明,您将拥有1个主题,当用户从UI中选择一个主题时,将在其中发射新的sensorId。然后,您需要订阅该确切的Subject,并在mergeMap的帮助下,您的subscription方法中将包含所有传感器值。
让我们看一下演示代码:
private sensorIdSubject = new Subject();
ngOnInit() {
this.sensorIdSubject.pipe(
mergeMap(sensorId =>
interval(5000).pipe(switchMap(() => this.getSensorData(sensorId)))
).subscribe(sensorData => {
// Every 5 second, each of the sensorIds that have been selected in UI will
// get sensor data and emit new value here in subscribe, because all of them
// have been merged.
})
}
public chooseSensor(sensorId) {
this.sensorIdSubject.next(sensorId);
}
这样合适吗我将根据您的需要更新代码,只需在评论部分告诉我即可。