आरएक्सजेवा v1.0.13 ने नए प्रकार के एक पर्यवेक्षक पेश किए: आरएक्स। सिंगल। यह अनुरोध-प्रतिक्रिया मॉडल को बहुत अच्छा लगा, लेकिन मानक दुष्प्रभावों की कमी है जैसे ऑपरेटरों को doOnNext()। इसलिए, परिणामस्वरूप कई चीजें घटित करना बहुत मुश्किल है।आरएक्स के कैशिंग/गर्म संस्करण को कैसे बनाया जाए।
मेरा विचार एक ही एकल उदाहरण के लिए एकाधिक सदस्यता के साथ doOnNext() को प्रतिस्थापित करना था। लेकिन इससे अंडरलेइंग काम कई बार किया जा सकता है: प्रत्येक सदस्यता के बाद एक बार।
उदाहरण rx.Single कार्यान्वयन:
private class WorkerSubscribe<SomeData>() : Single.OnSubscribe<SomeData> {
override fun call(sub: SingleSubscriber<in SomeData>) {
try {
val result = fetchSomeData()
sub.onSuccess(result)
} catch(t: Throwable) {
sub.onError(t)
}
}
}
val single = Single.create<SomeData>(WorkerSubscribe())
उपयोग:
single.subscribe({}, {})
single.subscribe({}, {}) // Data is fetched for the second time
यह एकल के एक उदाहरण बनाने के लिए संभव है कि नहीं fetchSomeData() कई बार यहां तक कि जब single.subscribe होगा() कई बार कहा जाता है, लेकिन कैश और एक ही परिणाम वापस? BehaviorSubject
या AsyncSubject
नहीं यह एक कदम पीछे पहली जगह में एकल का उपयोग करने से होगा? – atok
क्या आप एक कोड उदाहरण पोस्ट करेंगे ताकि समाधान को अनुमानित करने की आवश्यकता न हो? –