दिलचस्प पोस्ट
आर में एक सूची के सभी विशिष्ट क्रमपरिवर्तन उत्पन्न करना Facebook पर मित्र के दोस्तों की एक सूची प्राप्त करें प्रबंधित तरीके से .NET में मूल प्रक्रिया कैसे प्राप्त करें I java.lang.UnsatisfiedLinkError no *****। dll in java.library.path फ़ॉर्म के बीच डेटा कैसे साझा करें? मैं ctrl-c को C # कन्सोल ऐप में कैसा करूं? छोटी संभव राशि से एक अजगर फ़्लोटिंग बिंदु मूल्य बढ़ाएं कैसे कैनवास में छवि जोड़ने के लिए स्क्रीन पर एक पॉपअप विंडो केंद्र? पूंछ कॉल पुनरावृत्ति के लिए क्यों नहीं नेट / सी # ऑप्टिमाइज़ करता है? विटक फ़ाइल करने के लिए गीटक के अंदर Winmerge का उपयोग करें क्या एक .net windows अनुप्रयोग को एक .exe में संकुचित किया जा सकता है? डेटाबेस अनुरोध बनाने के लिए धागे का उपयोग करना Photos.app से छवियों को अपलोड करने के लिए मोबाइल सफारी के लिए एक HTML5 वेब ऐप? अकाका के लिए अच्छा उपयोग केस

हमें फ्लैटमैप का उपयोग करने की आवश्यकता क्यों है?

मैं आरएक्सजेएस का इस्तेमाल करना शुरू कर रहा हूं और मुझे समझ में नहीं आ रहा है कि इस उदाहरण में हमें flatMap या concatAll जैसे फ़ंक्शन का उपयोग करने की आवश्यकता क्यों है; जहां सरणी की सरणी यहाँ है?

 var requestStream = Rx.Observable.just('https://api.github.com/users'); var responseMetastream = requestStream .flatMap(function(requestUrl) { return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl)); }); responseMetastream.subscribe(url => {console.log(url)}) 

अगर कोई व्यक्ति दृष्टि से स्पष्ट कर सकता है कि क्या हो रहा है, तो यह बहुत मददगार होगा

वेब के समाधान से एकत्रित समाधान "हमें फ्लैटमैप का उपयोग करने की आवश्यकता क्यों है?"

जब मैंने Rxjs पर एक नजर रखना शुरू किया तो मैंने उस पत्थर पर भी ठोकर खाई। मेरी मदद किसने की है:

  • reactivex.io से प्रलेखन उदाहरण के लिए, flatMap : http://reactivex.io/documentation/operators/flatmap.html
  • Rxmarbles से प्रलेखन: http://rxmarbles.com/ । आपको वहां flatMap नहीं मिलेगा, आपको इसके बजाय switchMap को देखने चाहिए (दूसरा नाम)।
  • आरएक्स का परिचय जिसे आप याद कर रहे हैं: https://gist.github.com/staltz/868e7e9bc2a7b8c1f754 यह एक बहुत ही समान उदाहरण देता है विशेष रूप से यह इस बात को ध्यान में रखता है कि एक वादे केवल एक मूल्य के एक नमूने के समान हैं।
  • अंत में RxJava से प्रकार की जानकारी देख रहे हैं जावास्क्रिप्ट टाइप नहीं किया जा रहा है यहाँ मदद नहीं करता है मूल रूप से यदि Observable<T> तो Observable<T> एक प्रकार का ऑब्जेक्ट को flatMap है जो टाइप T के मानों को धक्का देता है, फिर flatMap इसके तर्क के रूप में T' -> Observable<T> प्रकार का फ़ंक्शन लेता है, और Observable<T>map प्रकार T' -> T का फ़ंक्शन लेता है और Observable<T> देता है

    अपने उदाहरण पर वापस जा रहे हैं, आपके पास एक फ़ंक्शन है जो यूआरएल स्ट्रिंग से वादे पैदा करता है। तो T' : string , और T : promise । और इससे पहले कि हमने promise : Observable<T''> से पहले कहा promise : Observable<T''> , promise : Observable<T''> T : Observable<T''> , T'' : html साथ T'' : html यदि आप map में वादा उत्पादन का कार्य करते हैं, तो आपको Observable<Observable<T''>> जब आप क्या चाहते हैं Observable<T''> : Observable<T''> आप चाहते हैं कि html मानों का उत्सर्जन करें। flatMap ऐसा कहा जाता है क्योंकि यह map के नतीजे (एक अवलोकन परत को हटा देता है) परिणाम देता है। आपकी पृष्ठभूमि पर निर्भर करता है, यह आपके लिए चीनी हो सकता है, लेकिन टाइपिंग जानकारी और ड्राइंग से यहाँ पर सब कुछ मेरे लिए क्रिस्टल स्पष्ट हो गया: http://reactivex.io/documentation/operators/flatmap.html

 ['a','b','c'].flatMap(function(e) { return [e, e+ 'x', e+ 'y', e+ 'z' ]; }); //['a', 'ax', 'ay', 'az', 'b', 'bx', 'by', 'bz', 'c', 'cx', 'cy', 'cz'] ['a','b','c'].map(function(e) { return [e, e+ 'x', e+ 'y', e+ 'z' ]; }); //[Array[4], Array[4], Array[4]] 

आप फ्लैटमार्क का उपयोग करते हैं जब आपके पास एक निष्कर्ष होता है जिसके परिणाम अधिक अवलोकन हैं।

यदि आपके पास कोई अवलोकन है जो एक अन्य अवलोकन के द्वारा निर्मित होता है तो आप इसे सीधे फ़िल्टर नहीं कर सकते हैं, कम कर सकते हैं या मैप कर सकते हैं क्योंकि आपके पास कोई अवलोकन नहीं है, डेटा नहीं है यदि आप मानचित्र पर फ्लैटमैप चुनते हैं तो एक अवलोकनशील उत्पादन करते हैं; तो आप ठीक हैं

दूसरे स्निपेट के रूप में, यदि आप एसिंक ऑपरेशन कर रहे हैं, तो आपको फ्लैमैटक का उपयोग करने की आवश्यकता है।

 var source = Rx.Observable.interval(100).take(10).map(function(num){ return num+1 }); source.subscribe(function(e){ console.log(e) }) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.1/Rx.min.js"></script> 

यह सरणियों की एक सरणी नहीं है यह अवलोकन (एस) का एक अवलोकन है

निम्नलिखित स्ट्रिंग का एक नमूदार प्रवाह वापस आता है।

 requestStream .map(function(requestUrl) { return requestUrl; }); 

हालांकि यह जेएसन की अवलोकन धारा का एक नमूदार प्रवाह देता है

 requestStream .map(function(requestUrl) { return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl)); }); 

flatMap स्वचालित रूप से हमारे लिए flatMap समतल करता है ताकि हम सीधे json स्ट्रीम देख सकें

एक निरीक्षण एक वस्तु है जो घटनाओं की धारा का उत्सर्जन करता है: अगला, त्रुटि और पूर्ण

जब आपका फ़ंक्शन अवलोकन करता है, यह एक धारा नहीं लौटा रहा है, लेकिन अवलोकन के एक उदाहरण। flatMap ऑपरेटर केवल उस flatMap को एक धारा के लिए नक्शे के रूप में दर्शाता है।

map की तुलना में यह flatMap का व्यवहार है: दिए गए फ़ंक्शन को निष्पादित करें और परिणामी वस्तु को किसी धारा में समतल करें।

सरल:

 [1,2,3].map(x => [x, x * 10]) // [[1, 10], [2, 20], [3, 30]] [1,2,3].flatMap(x => [x, x * 10]) // [1, 10, 2, 20, 3, 30]] 

flatMap द्वारा नए flatMap उत्सर्जित वस्तुओं को परिवर्तित करता है, फिर उन लोगों से उत्सर्जन को एक ऑब्ज़र्व्वेज में समतल करता है।

नीचे दिए गए परिदृश्य को देखें जहां get("posts") एक अवलोकन किया जा सकता है जो कि flatMap द्वारा "चपटा हुआ" है।

 myObservable.map(e => get("posts")).subscribe(o => console.log(o)); // this would log Observable objects to console. myObservable.flatMap(e => get("posts")).subscribe(o => console.log(o)); // this would log posts to console. 

फ्लैटमैप के साथ

 var requestStream = Rx.Observable.just('https://api.github.com/users'); var responseMetastream = requestStream .flatMap(function(requestUrl) { return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl)); }); responseMetastream.subscribe(json => {console.log(json)}) 

फ्लैटमैप के बिना

 var requestStream = Rx.Observable.just('https://api.github.com/users'); var responseMetastream = requestStream .map(function(requestUrl) { return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl)); }); responseMetastream.subscribe(jsonStream => { jsonStream.subscribe(json => {console.log(json)}) })