【发布时间】:2018-05-06 11:26:01
【问题描述】:
我怎样才能重新编写这段代码,这样我就不必像下面那样链接订阅者了?询问的原因是,由于代码的风格,这种风格将限制在一个可观察对象中,这取决于另一个可观察对象,它可能会让人感到困惑。
var results = myService
.GetData(accountId) // returns IObservable
.Subscribe(data =>
{
new MyWork().Execute(data) // returns IObservable
.Subscribe(result =>
{
myResults.Add(result);
WriteLine($"Result Id: {result.Id}");
WriteLine($"Result Status: {result.Pass}");
});
});
在 Peter Bons 的第一次回复后添加
下面是具有执行方法的 MyWork 类的代码
public class MyWork
{
public virtual IObservable<MyResult> Execute(MyData data)
{
MyResult result = null;
return IsMatch(data)
.Do(isMatch =>
{
if (isMatch)
{
result = new MyResult(1, true);
}
})
.Select(_ => result);
}
public IObservable<bool> IsMatch(MyData data)
{
return true;
}
}
【问题讨论】:
-
您的
MyWork类无法编译。这不是你的真实代码,对吧? -
由于我无法发布我的原始代码,我进行了更改以传达我在做什么的想法。对此我很抱歉,我应该在发布之前检查一下 sn-p 代码。