给定2种类型A
和B
,默认值为d(A)
& d(B)
。
和2个主题:
let sa = new Subject<A>()
let sb = new Subject<B>()
f
A -> B -> C
我创建了这个observable:
let o = Observable.CombineLatest(sa, sb, f)
但是,我需要o
根据d(A)
&amp;生成初始值。 d(B)
。文档说,一旦两个主题产生了他们的第一个输出,CombineLatest只会产生它的第一个输出。
我有2种方法,但我不知道哪种方法可行/哪种方法最佳,或者我是否遗漏了一些已经满足我需要的运算符。
我提出的第一种方法是在相关订阅OnNext
后,使用默认值手动调用sa
至sb
和o
。
我的第二种方法是使用BehaviorSubject
而不是普通Subject
s,使用初始值创建它们,并希望CombineLatest将其用作第一个输出。
感谢阅读。
附录
我已经确认第二种方法有效,但我仍然不知道在这种情况下引入BehaviorSubject
而不是普通Subject
是否最佳。
答案 0 :(得分:14)
如何使用public static Observable<T> StartWithDefault(this Observable<T> observable) {
return observable.StartWith(default(T));
}
?
sa.StartWithDefault().CombineLatest(sb.StartWithDefault(), f)
然后:
HTTPs urls