Rx中的一个观察者的多个订阅

Rx中的一个观察者的多个订阅

问题描述:

随着时间的推移,我正在尝试改进我的观察者中的过滤器,我想知道他们做这件事的最佳方式是什么。Rx中的一个观察者的多个订阅

例如myObservable.Where(x=>x.Color=="red").Subscribe();

然后myObservable.Where(x=>x.Color=="blue").Subscribe();

然后合并两成一个流,这样OnNext()叫上红色或蓝色观测。

也许它没有完全点击我正在发生的事情。

如果我也有myObservable.Where(x=>x.Type=="Car").Subscribe();怎么办?它会每次都继续调用相同的OnNext()方法?这对我有什么用处?我可能会根据哪个订阅调用更新而作出不同的反应,但同时我可能想要将订阅平坦化。

例如在上面的场景中,如果颜色是红色,我想写'新红色物体',如果是我想写'新车'的汽车。我如何在Rx中做到这一点?在订阅OnNext,OnError等时有一个重载。但是这需要观察者也是一个可观察对象(Subject)..如果我错了,请纠正我。

这对我来说没有意义..为什么要观察变化的东西也是可观察的?

这个怎么样?

myObservable.Where(x=>x.Color=="red" || x.Color == "blue").Subscribe(x=>Console.WriteLine("new {0} object", x.Color)); 
myObservable.Where(x=>x.Type=="Car").Subscribe(x=>Console.WriteLine("new car")); 

杰弗里

+0

如果我有myObservable.Where(x => x.Color ==“red”)。Subscribe(x => ...); 我该如何添加x.Color ==“蓝色”? 我使用.Merge()?要么.. – sjhuk 2010-07-14 00:51:48

首先,主题是可观察到的,其产生响应于已经观察到的其它可观察量。在某些情况下,它们可以用作“管道工”,甚至可以使用它们构建通过通道进行通信的“代理”形式。

对于您的主要问题:我认为它可能没有点击,因为在您的示例中,您已经忽略了观察者应该订阅的内容 - 它不能是......订阅(),它必须是。 ..Subscribe(观察者)。

你的问题的一个答案是,你可以订阅相同的观察员到多个observables。或者你可以使用合并。如果你想能够区分它们,那么最简单的方法是让两个主体观察,做那些特定的事情,然后通过观察向前合并。或者,您可以使用“选择”在合并之前标记观察值。