2015-05-29 8 views
5

डिफ़ॉल्ट मान d(A) & d(B) के साथ 2 प्रकार A और B दिए गए। और 2 विषय:आरएक्स के संयोजन के बारे में नवीनतम और डिफ़ॉल्ट प्रारंभिक मान

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

और एक समारोह प्रकार के fA -> B -> C

मैं इस नमूदार बनाया:

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

हालांकि, मैं o जरूरत d(A) & के आधार पर एक प्रारंभिक मूल्य का उत्पादन करने के d(B)। दस्तावेज़ों का कहना है कि एक बार दोनों विषयों ने अपना पहला आउटपुट तैयार करने के बाद CombineLatest केवल अपना पहला आउटपुट तैयार करेगा।

मेरे पास 2 दृष्टिकोण हैं, लेकिन मुझे नहीं पता कि कौन सा काम करेगा/कौन सा सबसे अच्छा है या अगर मुझे कुछ ऑपरेटर याद आ रहा है जो पहले से ही मुझे चाहिए।

पहले दृष्टिकोण मैं आया मैन्युअल OnNext मूलभूत मूल्यों के साथ sa करने और sb कॉल करने के लिए के बाद o के लिए प्रासंगिक सदस्यता किए गए हैं है।

मेरा दूसरा दृष्टिकोण सादा Subject एस के बजाय BehaviorSubject एस का उपयोग करना है, उन्हें प्रारंभिक मानों के साथ बनाएं और उम्मीद करें कि CombineLatest इसका उपयोग अपने पहले आउटपुट के लिए करेगा।

पढ़ने के लिए धन्यवाद।

परिशिष्ट मैंने पुष्टि की है कि 2 दृष्टिकोण से काम करता है, लेकिन अभी भी मैं अगर एक सादे Subject के बजाय एक BehaviorSubject शुरू इस मामले के लिए सबसे अच्छा है पता नहीं है।

उत्तर

12

StartWith का उपयोग करने के बारे में कैसे?

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

तब:

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

वास्तव में विशेष रूप से इस मामले के लिए एक '.StartWith' ऑपरेशन है। –

+0

@FyodorSoikin भी बेहतर। –

+0

Thx। इस समस्या के बारे में बात करते समय यहां उल्लेख करना कितना मुश्किल होगा! https://www.learnrxjs.io/operators/combination/combinelatest.html –

संबंधित मुद्दे