Dot-Net

關於 Rx 的 CombineLatest 和預設初始值

  • August 10, 2018

給定 2 種類型AB預設值d(A)& d(B)。和2個科目:

let sa = new Subject<A>()
let sb = new Subject<B>()

f和類型的函式A -> B -> C

我創建了這個可觀察的:

let o = Observable.CombineLatest(sa, sb, f)

但是,我需要o基於d(A)&生成一個初始值d(B)。文件說,CombineLatest 只有在兩個主題都產生第一個輸出後才會產生第一個輸出。

我有 2 種方法,但我不知道哪種方法可行/哪種方法最好,或者我是否缺少一些已經滿足我需要的操作員。

我想出的第一種方法是在相關訂閱完成後手動OnNext呼叫預設值。sa``sb``o

我的第二種方法是使用BehaviorSubjects 而不是普通Subject的 s,使用初始值創建它們,並希望 CombineLatest 將其用於其第一個輸出。

謝謝閱讀。

附錄 我已經確認第二種方法有效,但我仍然不知道引入 aBehaviorSubject而不是 plainSubject是否最適合這種情況。

怎麼用StartWith

public static Observable<T> StartWithDefault(this Observable<T> observable) {
   return observable.StartWith(default(T));
}

然後:

sa.StartWithDefault().CombineLatest(sb.StartWithDefault(), f)

引用自:https://stackoverflow.com/questions/30540106