RxJava में ऑब्जर्वेबल, कंप्लीटेबल और सिंगल में क्या अंतर है


113

किसी को भी स्पष्ट उदाहरण के साथ RxJava में अवलोकन, पूर्ण और एकल के बीच अंतर बता सकते हैं?

किस परिदृश्य में हम दूसरों पर एक का उपयोग करते हैं?


क्या आपने कुछ अनुभव किया है?
जे। चोमेल

मैंने अभी हाल ही में शुरू किया है .. @ J.Chomel
राजा जवाहर

25
यह पूरी तरह से वैध सवाल है और इसे बंद नहीं किया जाना चाहिए था। यद्यपि आरएक्स एक महान पुस्तकालय है, लेकिन प्रलेखन और उदाहरण दुर्भाग्य से बेहद खराब और भ्रामक हैं।
रनऑलॉप

जवाबों:


247

Observableसमय के साथ मूल्यों का उत्सर्जन करने वाले घटना स्रोत का सामान्य रिएक्टिवएक्स बिल्डिंग ब्लॉक है। (और इस प्रकार हर भाषा में मौजूद है ReactiveX का विस्तार)
छोटी अवलोकन योग्य घटनाओं में निम्न हैं:
onNext * (.Completed | onError)? / (* शून्य या अधिक? - शून्य या 1)

Singleऔर CompletableRxJava में विशेष रूप से पेश किए गए नए प्रकार हैं जो कम प्रकार का प्रतिनिधित्व करते हैं Observable, जिनमें अधिक संक्षिप्त एपीआई है।

Singleप्रतिनिधित्व करते हैं Observableकि एकल मूल्य या त्रुटि का उत्सर्जन करें।

Completableप्रतिनिधित्व करते हैं Observable, कि उत्सर्जन करता है कोई मूल्य नहीं है, लेकिन केवल टर्मिनल घटनाओं या तो onErrorयाonCompleted

आप उन तरीकों के बारे में सोच सकते हैं जो एक विधि के अंतर की तरह हैं जो वापस आती है:

  • वस्तुओं का संग्रह - अवलोकनीय

  • एकल वस्तु - एकल

  • और विधि जो कोई मान नहीं देती है (शून्य विधि) - पूर्णता।

Singleउपयुक्त हो सकता है जब आपके पास कार्य उन्मुख हो और आप एकल मूल्य की उम्मीद करते हैं, जैसे नेटवर्क अनुरोध जो एक बार किया जाता है और मूल्य (या त्रुटि) वापस किया जाता है, तो नेटवर्क कॉल एक समय के फैशन में संचालित होता है, जिसका अर्थ है कि आप अतिरिक्त मानों की वापसी की उम्मीद नहीं करते हैं अधिक समय तक। एक अन्य उदाहरण DB लाने डेटा ऑपरेशन है।

Completableजब आपके पास उचित हो Observableऔर आप ऑपरेशन से उत्पन्न मूल्य के बारे में परवाह नहीं करते हैं, या कोई भी नहीं है। उदाहरण के लिए उदाहरण कैशे को अपडेट कर रहे हैं, ऑपरेशन सफल / विफल हो सकता है, लेकिन इसका कोई मूल्य नहीं है।
एक अन्य उदाहरण कुछ लंबे समय तक चलने वाला इनिट ऑपरेशन है जो कुछ भी वापस नहीं करता है। यह UPDATE / PUT नेटवर्क कॉल हो सकता है जो केवल सफलता संकेत के साथ हुआ।

किसी भी स्थिति में, कंप्लीटेबल और सिंगल नई क्षमताओं को नहीं जोड़ रहे हैं, लेकिन वे अधिक मजबूत और संक्षिप्त एपीआई पेश कर रहे हैं, जो ऑब्जर्वेबल के पीछे के संचालन के बारे में अधिक बताता है कि एपीआई ने उजागर किया।

संपादित करें:

RxJava2 Maybe:

RxJava2 ने एक नया प्रकार जोड़ा Maybe, जिसे और सिंगल Maybeका संयोजन कहा जाता है Completable

ऊपर की समान भाषा में, Maybeएक विधि के रूप में सोचा जा सकता है Optionalजो किसी प्रकार का रिटर्न देता है, Optionalऑब्जेक्ट के चारों ओर एक आवरण होता है जो स्पष्ट रूप से बताता है कि क्या हमारे पास इसमें कुछ मूल्य है - Objectया नहीं (शून्य के बजाय)।
हमारे साथ Maybeया तो कुछ मूल्य हो सकते हैं या जैसे कुछ Singleभी नहीं है - जैसे Completable। इसके अतिरिक्त, दोनों की तरह, हमारे पास त्रुटि है।
Maybeमूल्यवान है जब हम यह चिन्हित करना चाहते हैं कि Observableमूल्य नहीं हो सकता है और बस पूरा हो जाएगा।
एक उदाहरण कैश से प्राप्त किया जाएगा, कैश में हमारे पास कोई मूल्य नहीं होगा, इसलिए इस मामले में, हम पूरा करेंगे, ओउ हम onNextकैश से मूल्य के साथ प्राप्त करेंगे ।
यह RxJava2 के साथ एक धारा में गैर-शून्य मानों को संभालने के लिए भी योग्य है।

RxJava2 Flowable:

सबसे पहले, चलो बैकप्रेस को परिभाषित करते हैं। Backpressure उस स्थिति से निपटने का एक साधन है जहाँ डेटा को संसाधित किए जाने की तुलना में तेज़ी से उत्पन्न किया जाता है। Flowableआइटम का अनुरोध करने के लिए डाउनस्ट्रीम को अनुमति देने के लिए बैकप्रेस की सहायता है आप यहां अंतर के बारे में अधिक पढ़ सकते हैं ।


2
प्रवाह के बारे में क्या?
नीरज चौहान

तो अगर मैं कोटलिन में लिख रहा हूँ, है Maybe<T>, अनिवार्य रूप से Single<T?>,?
AAverin

आप विचार कर सकते हैं Singleएक होने के लिए Completableदिए गए मान के साथ?
Eido95

13
  1. Flowable और प्रत्यक्ष परिमित या अनंत धाराओं का प्रतिनिधित्व कर सकते हैं। फ्लोएबल सपोर्ट बैक-प्रेशर
  2. एकल एक तत्व के साथ धाराएँ हैं।
  3. शायद 0 या एक तत्व के साथ धाराएँ हैं।
  4. अंत में एक कंपेटिबल बिना किसी तत्व के एक स्ट्रीम का प्रतिनिधित्व करता है, अर्थात यह केवल एक मूल्य के बिना या असफल हो सकता है।

एक संक्षिप्त जवाब मुझे यहां आरएक्सजाव अनुभाग पर मिला ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.