【问题标题】:Multiple Subscriptions from one Observer in Rx来自 Rx 中的一个观察者的多个订阅
【发布时间】:2010-07-11 01:24:45
【问题描述】:

随着时间的推移,我正在尝试改进观察者中的过滤器,我想知道他们这样做的最佳方法是什么。

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

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

然后将两者合并为一个流,以便在 Red OR Blue observables 上调用 OnNext()

也许它还没有完全了解我正在发生的事情。

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

例如在上面的场景中,如果颜色是红色,我想写“新红色对象”,如果是汽车,我想写“新车”。我将如何在 Rx 中执行此操作? OnNext、OnError 等的订阅超载。但这要求观察者也是可观察的(主题)。如果我错了,请纠正我。

这对我来说毫无意义。为什么观察变化的东西也应该是可观察的?

【问题讨论】:

    标签: .net system.reactive


    【解决方案1】:

    这个怎么样?

    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"));
    

    杰弗里

    【讨论】:

    • 如果我有 myObservable.Where(x=>x.Color=="red").Subscribe(x=>...);然后如何添加 x.Color=="blue"?我使用 .Merge() 吗?或者..
    【解决方案2】:

    首先,Subject 是一个 observable,它响应于观察到其他 observable 而生成。在某些情况下,它们作为“管道”很有用,您甚至可以使用它们来构建一种通过渠道进行通信的“代理”形式。

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

    您的问题的一个答案是,您可以将同一个观察者订阅到多个可观察对象。或者你可以使用合并。如果您希望能够区分它们,那么最简单的方法是让两个观察对象,做特定于那种事情的事情,然后继续传递观察结果以进行合并。或者,您可以在合并观察之前使用 Select 对其进行标记。

    【讨论】:

      猜你喜欢
      • 2018-06-11
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 2018-08-05
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多