2015-05-29 26 views
5

Verilen değerler d(A) & d(B)A ve B verilir. ve 2 Konular:Rx'in CombineLatest ve varsayılan başlangıç ​​değerleri hakkında

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

ve

A -> B -> C Bu gözlemlenebilir oluşturulan Çeşidi f bir fonksiyonu: Ancak

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

, I d(A) & göre bir başlangıç ​​değerinin üretilmesi için o mi d(B). Dokümanlar, CombineLatest'in her iki konu da ilk çıktılarını ürettikten sonra ilk çıkışını üreteceğini söylüyor.

2 yaklaşımım var, ancak hangisinin işe yarayacağını/hangisinin daha iyi olacağını ya da ihtiyacım olan şeyi yapan bir operatörün eksikliğini bilmiyorum.

Birinci yaklaşım

Ben o alakalı abonelikleri yapıldıktan sonra elle OnNext varsayılan değerlerle sa ve sb çağırmaktır geldi.

Benim ikinci yaklaşım yerine düz Subject s BehaviorSubject s kullanan ilk değerlerle bunları oluşturmak ve CombineLatest ilk çıkışı için kullanacaktır umut etmektir.

Okumak için teşekkürler.

Ek Ben 2 yaklaşım çalıştığını doğruladı ettik, ancak bunun yerine düz Subject bir BehaviorSubject tanıtan bu durumda en iyi olup olmadığını hala bilmiyorum.

cevap

12

StartWith'u kullanmaya ne dersiniz? Sonra

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

:

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

özellikle bu durum için aslında bir '.StartWith' operasyonu vardır. –

+0

@FyodorSoikin Daha da iyisi. –

+0

Thx. Tam olarak bu sorun hakkında konuştuğumuzda, burada ne kadar zor olurdu! https://www.learnrxjs.io/operators/combination/combinelatest.html –

İlgili konular