我正在尝试创建一个单一的Observable,它的OnNext流来自一个可观察的,哪个OnError流来自另一个可观察的。
之所以这样做,是因为我试图包装一个我控制范围之外的类,并使用事件来传达其状态。它有两个事件,一个指示完成(布尔),另一个指示发生异常。
IObservable<Exception> error = Observable.FromEventPattern<ExceptionRoutedEventArgs>(foo, "Failed")
.Select(x => x.EventArgs.ErrorException);
IObservable<bool> opened = Observable.FromEventPattern<RoutedEventArgs>(foo, "Opened")
.Select(x => ((Bar)x.Sender).IsOpen);
现在,我不能使用标准的Observable.Merge
,因为两个可观察值都有不同的通用参数。但是我想用伪代码来做到这一点:
Observable.Merge(opened, error, (op, err) =>
{
if(op) { return op;}
if(err != null){return Observable.Throw(err);}
}
现在,有很多原因使上面的代码与可能存在的任何内容不太相似,但我希望意图很清楚。
我认为实现此工作的一种方法是使用Subject ,但是我听说应该避免这样做,因为它在功能概念中引入了状态。而且我的想法是将两个可观察变量组合为一个可观察变量OnNext和OnError流似乎应该存在:)
参考方案
您可以使用Observable.Create
:
var combined = Observable.Create<bool>(o =>
{
var openSub = opened.Subscribe(o);
var errorSub = error.Subscribe(o.OnError);
return new CompositeDisposable(openSub, errorSub);
});
或者,您可以将每个Exception
投影到一个仅抛出错误的IObservable<bool>
,然后合并结果序列:
var combined = opened.Merge(error.SelectMany(Observable.Throw<bool>));
尽管仅仅因为您的源使用Exceptions作为控制流并不意味着您必须-为什么不将Exception
投影到false
,那么成功则得到true
而失败则得到false
:
var combined = opened.Merge(error.Select(_ => false));
Java中的<<或>>>是什么意思? - javaThis question already has answers here: Closed 7 years ago. Possible Duplicate: What does >> and >>> mean in Java?我在一些Java代码中遇到了一些陌生的符号,尽管代码可以正确编译和运行,但对于括号在此代码中的作用却感…
菱形运算符<>是否等于<?> - java我在util.TreeSet类中发现,其中一个构造函数正在使用具有空泛型类型的新TreeMap调用另一个构造函数。 public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<>(comparator)); } new TreeMap<>是什么意思…
声纳测试用例失败 - java我正在尝试为我的项目之一获得声纳报告。我已经运行mvn clean installRunning blah.blah.BlahTest1 Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec Running blah.blah.BlahTest2 Tests run…
休眠映射<键,设置<值>> - java我有以下表格:@Entity @Table(name = "events") Event --id --name @Entity @Table(name = "state") State --id --name @Entity @Table(name = "action") Action --id …
如何使用BeautifulSoup在<tr>中捕获特定的<td> - python尝试从nyc Wiki页面中的高中列表中获取所有高中名称。我已经写了足够多的脚本,可以让我获取包含在高中,学业和入学条件列表的表的<tr>标记中的所有信息-但是我如何才能缩小到我认为的范围内在td[0]内休息(会弹出KeyError)-只是学校的名称?到目前为止我写的代码:from bs4 import BeautifulSoup from ur…