给定两种类型A
和B
,默认值为d(A)
&d(B)
。2受试者:
let sa = new Subject<A>()
let sb = new Subject<B>()
和类型为A -> B -> C
的函数f
我创建了这个observable:
let o = Observable.CombineLatest(sa, sb, f)
然而,我需要o
基于d(A)
&d(B)
。文档说,只有当两个主题都产生了第一个输出时,combinellatest才会产生它的第一个输出。
我有两种方法,但我不知道哪一种行得通/哪一种是最好的,或者如果我错过了一些已经做了我需要的操作符。
我想到的第一种方法是在o
的相关订阅完成后,用默认值手动调用OnNext
到sa
和sb
。
我的第二种方法是使用BehaviorSubject
s而不是普通的Subject
s,用初始值创建它们,并希望combinellatest将其用于其第一个输出。
感谢您的阅读。
附录我已经确认了第二种方法是有效的,但我仍然不知道是否引入BehaviorSubject
而不是普通的Subject
对于这种情况是最好的。
使用StartWith
如何?
public static Observable<T> StartWithDefault(this Observable<T> observable) {
return observable.StartWith(default(T));
}
:
sa.StartWithDefault().CombineLatest(sb.StartWithDefault(), f)