जब आप जावा 8 पर इसका उपयोग करते हैं तो आरएक्सजेवा की पूरी शक्ति दिखाई देती है, अधिमानतः रेट्रोफिट जैसी लाइब्रेरी के साथ। यह आपको त्रुटि प्रबंधन के पूर्ण नियंत्रण के साथ, एक साथ त्रिकोणीय श्रृंखला संचालन करने की अनुमति देता है। एक पूर्णांक है कि आदेश और apiClient निर्दिष्ट करता है::
apiClient
.getOrder(id)
.subscribeOn(Schedulers.io())
.flatMapIterable(Order::getLineItems)
.flatMap(lineItem ->
apiClient.getProduct(lineItem.getProductId())
.subscribeOn(Schedulers.io())
.map(product -> product.getCurrentPrice() * lineItem.getCount()),
5)
.reduce((a,b)->a+b)
.retryWhen((e, count) -> count<2 && (e instanceof RetrofitError))
.onErrorReturn(e -> -1)
.subscribe(System.out::println);
यह अतुल्यकालिक रूप से एक आदेश की कुल कीमत, निम्नलिखित गुणों के साथ की गणना करेगा: आदेश प्रबंधन microservice के लिए एक रेट्रोफिट ग्राहक उदाहरण के लिए, id
दिया निम्नलिखित कोड पर विचार :
- सबसे 5 किसी एक समय में उड़ान में एपीआई के खिलाफ अनुरोध (और आप सभी अनुरोधों के लिए एक कठिन टोपी के लिए आईओ शेड्यूलर ठीक कर सकते हैं, न सिर्फ एक भी नमूदार श्रृंखला के लिए) पर
अप करने के लिए
- नेटवर्क त्रुटियों के मामले में 2 retries
विफलता के मामले में
- -1 (एक antipattern TBH, लेकिन यह एक अन्य चर्चा है)
इसके अलावा, IMO .subscribeOn(Schedulers.io())
के बाद प्रत्येक नेटवर्क कॉल निहित होना चाहिए - आपको लगता है कि संशोधित करके कैसे आप रेट्रोफिट बनाने कर सकते हैं ग्राहक। कोड की 11 + 2 लाइनों के लिए बुरा नहीं है, भले ही यह एंड्रॉइड-आईएसएच की तुलना में अधिक बैकएंड-आईएसएच है।
स्रोत
2016-08-29 20:53:59
मैंने देखा कि यह आलेख बताता है कि, अगर यह मदद करता है। http://blog.feedpresso.com/2016/01/25/why-you-should-use-rxjava-in-android-a-short-introduction-to-rxjava.html – lsiva
धन्यवाद। ऐसा लगता है कि कैसे स्कैला समरूपता को संभाला जाता है। मैं आरएक्सजेवा में उपयोग करने के लिए अपनी परियोजनाओं में कुछ टेस्ट रन करूंगा। हालांकि क्या आपको लगता है कि AsyncTask की कार्यक्षमता के साथ एक मौलिक दोष है? – qantik