हम कैश() ऑपरेटर का उपयोग एक लंबे कार्य (http अनुरोध) कई बार क्रियान्वित करने से बचने के लिए कर सकते हैं, और उसके परिणाम का पुन: उपयोग:नमूदार, त्रुटि और कैश पर पुन: प्रयास केवल तभी पूरा
Observable apiCall = createApiCallObservable().cache(); // notice the .cache()
---------------------------------------------
// the first time we need it
apiCall.andSomeOtherStuff()
.subscribe(subscriberA);
---------------------------------------------
//in the future when we need it again
apiCall.andSomeDifferentStuff()
.subscribe(subscriberB);
पहली बार, http अनुरोध निष्पादित किया गया है, लेकिन दूसरी बार, क्योंकि हमने कैश() ऑपरेटर का उपयोग किया था, अनुरोध निष्पादित नहीं किया जाएगा, लेकिन हम पहले परिणाम का पुन: उपयोग करने में सक्षम होंगे।
यह पहला काम करता है जब पहला अनुरोध सफलतापूर्वक पूरा हो जाता है। लेकिन अगर पहले प्रयास में ऑनर को बुलाया जाता है, तो अगली बार जब कोई नया ग्राहक एक ही अवलोकन करने के लिए सदस्यता लेता है, तो ऑनर को दोबारा http अनुरोध का प्रयास किए बिना फिर से बुलाया जाएगा।
हम जो करने की कोशिश कर रहे हैं वह यह है कि अगर अगली बार पहली बार कॉल किया जाता है, तो अगली बार जब कोई एक ही देखने योग्य की सदस्यता लेता है, तो http अनुरोध को स्क्रैच से प्रयास किया जाएगा। यानी अवलोकन योग्य केवल सफल एपीआई कॉल को कैश करेगा, यानी जिनके लिए पूर्ण पर कॉल किया गया था।
आगे बढ़ने के बारे में कोई विचार? हमने पुनः प्रयास() और कैश() ऑपरेटर का उपयोग करके बहुत भाग्यशाली नहीं किया है।
धन्यवाद akarnokd, यह अच्छा लग रहा है। मुझे केवल कुछ समस्याएं हैं जब स्रोत एक लंबे समय तक चलने वाला http अनुरोध (कुछ सेकेंड) है, और दूसरा, तीसरा ग्राहक सब्सक्राइब करता है जबकि पहले भी प्रगति पर है। उस स्थिति में वे सभी असफल हो जाते हैं, और अनुरोध एक से अधिक बार प्रयास नहीं किया जाता है। कैश() ऑपरेटर अलग-अलग व्यवहार करता है। मैं इसके लिए और अधिक देखूंगा, और उस मुद्दे को दोहराने का प्रयास करूंगा जिसका उल्लेख मैं आपके उदाहरण का उपयोग कर रहा हूं, और जल्द ही आपसे संपर्क करूँगा। – Plato