1

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

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

大理石图

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

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

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

3 回答 3

4

你正在寻找Sample.

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

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

于 2018-02-09T13:39:23.380 回答
3

不能真正改善“示例”响应,但如果您想使用一些较旧/原始/核心功能构建它,基本上,您只需要在异常上组合一个“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());

输出:

IO 可观察 2 4

于 2018-02-09T23:55:55.863 回答
0

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

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

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

于 2018-02-17T15:17:51.303 回答