当第二次可观察的散发时,获得第一个可观察的最新值



我在视图模型中有两个可观察到的物品,一个可观察到的ui更改的值,另一个代表命令失败时提出的异常。

我想创建一个可观察到的可观察的,该可观察到在提出异常时从第一个观察到的值中排放值。简而言之,我想获得以下结果

大理石图

Value (Observable 1)     -- 1 --- 2 -------- 3 ------ 4 ---------------- 5 -----------
Exception (Observable 2) ----------- e ------------------------- e ------------ e --
ExpectedResult           ----------- 2 ------------------------- 4 ------------ 5 --

您正在寻找Sample

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

每次Exception发出信号时,这都会从Value获取最新值。

无法真正改善'示例'响应,但是如果您想使用一些较旧的/原始/核心功能来构建它,从本质上讲,您只需要组合一个'combineLatest',以及异常流的独特努力((。

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

输出:

iObservable24

确保异常是热或发布的。

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

当两个例外之间没有值时,这将使您获得最后值。

相关内容

  • 没有找到相关文章

最新更新