Dhr*_*esh 3 rxjs typescript angular
问题
我BehaviourSubject在Angular2中使用了几个变量来从服务获取数据并更新控制器中的数组.
问题是所有相应的.subscribe()函数执行相同的操作,我找不到重用代码的方法 - 也许将lambda函数传递给.subscribe()?的主体?
一次又一次地重新键入相同的代码是没有意义的 - 它会影响组件的可读性.
场景:
使用来自不同来源的数据更新图表
this.catagoryASubject.subscribe(
value => {
// updating array and chart
this.radarChartData.forEach((val, i) => { if (val.label == value.name) { this.radarChartData[i].data = value.data } });
},
err => console.log("error"),
() => console.log("complete")
);
this.catagoryBSubject.subscribe(
// same code as in the above subscriber
);
Run Code Online (Sandbox Code Playgroud)
您可以使用let()运算符对可观察链的常用功能进行分组.它需要observable作为输入并返回一个observable,所以你可以写:
function updateChart(observable: Observable<any>) {
return observable
.map(value => {/* do your thing*/})
// .filter().switchMap().do() // whatever
.catch(error => console.log("error"))
}
Run Code Online (Sandbox Code Playgroud)
然后使用它:
this.catagoryASubject.let(updateChart).subscribe();
this.catagoryBSubject.let(updateChart).subscribe();
this.catagoryCSubject.let(updateChart).subscribe();
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用subscribe()它作为触发器,而不是在那里进行任何处理工作.它更清洁,您可以async在需要时轻松切换到管道......
this.A = this.catagoryASubject.let(updateChart);
<div> {{ A |async |json }} </div>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
403 次 |
| 最近记录: |