【问题标题】:Get the latest value of first observable when second observable emits当第二个 observable 发出时,获取第一个 observable 的最新值
【发布时间】:2018-02-17 23:17:51
【问题描述】:

我的视图模型中有两个可观察对象,一个是由 UI 更改的值的可观察对象,另一个表示命令失败时引发的异常。

我想创建一个 observable,它在引发异常时从第一个 Observable 发出值。总之我想得到以下结果

大理石图

Value (Observable 1)     -- 1 --- 2 -------- 3 ------ 4 ---------------- 5 -----------

Exception (Observable 2) ----------- e ------------------------- e ------------ e --

ExpectedResult           ----------- 2 ------------------------- 4 ------------ 5 --

【问题讨论】:

  • 请描述得详细一点

标签: system.reactive reactiveui rx.net


【解决方案1】:

您正在寻找Sample

Value
    .Sample(Exception)
    .Subscribe(...);

这将在每次Exception 发出信号时从Value 获取最新值。

【讨论】:

    【解决方案2】:

    不能真正改进“示例”响应,但如果您想使用一些较旧/原始/核心功能构建它,本质上,您只需组合一个“CombineLatest”,加上一个 DistinctUntilChanged()在异常流上。

    var values = new Subject<int>();
    var exception = new Subject<Exception>();
    values.CombineLatest(exception, Tuple.Create)
          .DistinctUntilChanged(t => t.Item2)
          .Select(t => t.Item1)
          .Dump();
    
    values.OnNext(1);
    values.OnNext(2);
    exception.OnNext(new Exception());
    values.OnNext(3);
    values.OnNext(4);
    exception.OnNext(new Exception());
    

    输出:

    IObservable 2 4

    【讨论】:

      【解决方案3】:

      确保异常是热的或已发布的。

      Value.SelectMany(v => Exception
          .Take(1).Select(e => v))
      .Switch();
      

      这将使您在两个异常之间没有值时获得最后一个值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 2019-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多