我有三种IObservable
类型Foo
,Bar
和Baz
。此外,还有一种方法定义为:
void DoWork(Foo foo);
IObservable
在别处被定义为Subject
并且不时会调用OnNext
。
每当有新数据可用时(由某些Where查询定义),我想使用最新的DoWork
值调用Foo
方法。如果未生成Foo
值,则不应调用该方法。
最简单的方法是什么?
更具体地说,请参阅以下示例。我希望在DoWork
或bar
更改后使用最新的baz
(foo
)致电f.id == 1
:
void Wire(IObservable<Foo> foo, IObservable<Bar> bar, IObservable<Baz> baz)
{
foo.Where(f => f.Id == 1)
.Subscribe(f => DoWork(f));
}
答案 0 :(得分:1)
这对我有用:
var ubar = bar.Select(x => Unit.Default);
var ubaz = baz.Select(x => Unit.Default);
ubar.Merge(ubaz)
.CombineLatest(foo.Where(f => f.Id == 1), (u, f) => f)
.Subscribe(f => DoWork(f));
答案 1 :(得分:0)
您可以使用Do
extension method上的Observable
class执行此操作:
IObservable<Foo> filteredList = foos.Where(...);
// Invoke DoWork on each instance of Foo.
filteredList.Do(DoWork);