2016-03-30 11 views
12

में Observable.defer और Observable.create के बीच अंतर Observable में defer और create विधियों के बीच अंतर मुझे समझा सकता है? मैं समझता हूँ कि जब मैं defer का उपयोग करना चाहिए विफल रही है और जब मैं create ..जावा आरएक्स

संदर्भ का उपयोग करना चाहिए:

आस्थगित करें: http://reactivex.io/documentation/operators/defer.html

बनाएँ: http://reactivex.io/documentation/operators/create.html

आप

उत्तर

7

(बनाने के लिए धन्यवाद। ..) वास्तव में अवलोकन योग्य बनाता है।

public final static <T> Observable<T> create(OnSubscribe<T> f) { 
     return new Observable<T>(hook.onCreate(f)); 
    } 

आस्थगित करें (...), फैक्टरी समारोह है कि रिटर्न नमूदार (विषय, आदि ...) स्वीकार करता है OnSubscribeDefer साथ यह लपेटता है और प्रत्यक्ष बनाता है केवल जब ग्राहक सदस्याएं, हर ग्राहक के लिए नए प्रत्यक्ष।

public final static <T> Observable<T> defer(Func0<Observable<T>> observableFactory) { 
    return create(new OnSubscribeDefer<T>(observableFactory)); 
} 

कुछ और जानकारी here

7

तो भेद लगता है होना करने के लिए देखें: defer अच्छा है जब आप कुछ है कि बनाता है/पहले से ही एक नमूदार देता है, लेकिन आप तो होना ही है कि इस प्रक्रिया के लिए यह नहीं करना चाहते सदस्यता तक।

create अच्छा है जब आपको मैन्युअल रूप से एसिंक प्रक्रिया को लपेटने और एक अवलोकन करने की आवश्यकता होती है। सृजन तक यह सृजन स्थगित है।

defer एक ऑपरेटर कि नमूदार दृश्यों के आस्थगित रचना के लिए सक्षम बनाता है:

दूसरे शब्दों में कहें करने के लिए।

create अवलोकन योग्य अनुक्रम का एक कस्टम कार्यान्वयन है (जहां सदस्यता सदस्यता तक स्थगित कर दी गई है)।

तो तुम एक स्थिति आप just उपयोग कर सकते हैं जहां कुछ परिणाम/मूल्य से एक Observable बनाने के लिए या आप एक नेटवर्क एपीआई परत उस अनुरोध का एक Observable देता है, लेकिन आप उस अनुरोध को शुरू करने के लिए नहीं करना चाहते हैं सदस्यता तक। defer उन परिदृश्यों के लिए अच्छा होगा।

आप एक नेटवर्क एपीआई परत है कि नहीं वापसी के लिए एक अनुरोध के लिए एक Observable करता है, लेकिन जो आप के लिए एक Observable इंटरफेस की जरूरत है, तो आप create का उपयोग हो सकता है। उस Observable अनुक्रम अभी भी सदस्यता तक बनाए नहीं जाएगा। यदि आप चाहते थे कि नेटवर्क कॉल सब्सक्रिप्शन के बावजूद बंद हो जाए, तो आप एक अलग तंत्र का उपयोग करेंगे, जैसे कि Subject, संभावित रूप से प्रतिलिपि।

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