Rxjs 5:如何建立可观测数据链?

Rxjs 5:如何建立可观测数据链?,rxjs,rxjs5,Rxjs,Rxjs5,我是RxJS的新手,我正在尝试实现行为完全类似MS Excel的可观察链。概念:假设excel有5列“姓名”、“年龄”、“性别”、“国家”、“Zipcode”。我们可以对每一列单独应用过滤器,这也会影响其他列中显示的记录 在这里,数据源接收数据后端服务,数据源只有两个函数addRecord和removeRecord 我在这里试图实现的目的是,假设我将创建Observable并附加到数据源,称之为OBS-1,这将从数据源接收数据。OBS-1可以有自己的过滤器。假设我将创建另一个可观测的OBS-2,

我是RxJS的新手,我正在尝试实现行为完全类似MS Excel的可观察链。概念:假设excel有5列“姓名”、“年龄”、“性别”、“国家”、“Zipcode”。我们可以对每一列单独应用过滤器,这也会影响其他列中显示的记录

在这里,数据源接收数据后端服务,数据源只有两个函数addRecord和removeRecord

我在这里试图实现的目的是,假设我将创建Observable并附加到数据源,称之为OBS-1,这将从数据源接收数据。OBS-1可以有自己的过滤器。假设我将创建另一个可观测的OBS-2,如果OBS-1中有任何过滤器,它将接收数据OBS-1过滤数据。另一个可观察对象是OBS-3,它再次从OBS-2接收数据,如果OBS-2中有,则进行过滤,依此类推

如果OBS-2被销毁或取消订阅,OBS-3将从OBS-1接收数据


我们如何在RxJs中实现这一点?

我认为您误解了Rx的一些内容。可观察对象没有过滤器,您也不会“实时”从中添加和删除过滤器。也没有基于谁订阅的可观察的转发数据

相反,你建立了一个呼叫链。您从一个可观察的源开始,比如一个来自addRecord,另一个来自removeRecord事件。然后,通过Rx中的各种方式,将这些观察值链接起来,形成新的观察值,并最终订阅最终的观察值。订阅将激活整个链,当源事件触发时,所有操作员都将触发,如果没有过滤,最终事件将到达订阅

你实际上可以做你在Rx中描述的事情。例如,使用switchMap可以相对容易地更改可观察对象上的过滤器,该操作符允许您将一个序列投影到另一个序列上,并每次切换到新序列。例如filterSource.switchMapfilterFunction=>Obs-1.filterfilterFunction。更简单的是,您可以取消第一次订阅,然后再次设置接收链。然而,使用内置函数会在方程中留下许多杂耍状态

然而,我强烈怀疑你实际上并不需要如此复杂的行为。您需要的内容可以像这样简单地存档:

var Src-1 = fromEvent(dataSource, 'addRecord') // create the first source
var Src-2 = fromEvent(dataSource, 'removeRecord') // and the other source
var Obs-1 = Src-1.combineLatest(Src-2) // combine both sources
  .filter(e => someCondition(e)) // filter the source
var Obs-2 = Obs-1.mergeMap(e => someOtherCondition(e) ? Change(e) : Rx.Observable.of(e)) // on someOtherCondition, either transform the source with the `Change(e)` function. Or keep it unchanged with `of(e)`
var Obs-3 = Obs-2.filter(e => anotherCondition(e)) // Filter again
var sub = Obs-3.subscribe() // activate the sequence.

谢谢你纠正我。每个观察员OBS-1、OBS-2等。。。可以有自己的订阅,该订阅将接收数据。事实上,观察者将动态添加。我们如何做到这一点?你如何动态地接收可见光?你不是说订阅吗?我认为你需要更具体地说明你想要什么,你的来源是什么导致了这些变化。Rx是关于反应式编程的,在反应式编程中,重要的是要了解数据的来源,而不是如何操作数据。一旦你把源头弄清楚了,剩下的问题就会解决,现在你似乎在寻找错误的解决方案。