javascript - आरएक्सजेएस के फ्लैटमैप को समझना, सी#शब्दों में फ्लैटमैपलाटेस्ट



c# .net (1)

आरएक्सजेएस रिएक्टिव एक्सटेंशन परिवार का हिस्सा है जो सी # (स्वाभाविक रूप से, आरएक्स अब एक माइक्रोसॉफ्ट प्रोजेक्ट है) सहित विभिन्न भाषाओं में लागू किया गया है।

तो, हां, सी # में समानताएं हैं ... :-)

नक्शा, फ्लैटमैप और फ्लैटमैपलाटस्ट की अवधारणाएं स्पष्ट नहीं हैं। मैं खुद आरजेक्सएस में एक शुरुआत कर रहा हूं, इसलिए मुझे आशा है कि मैं इसे सही कर दूंगा ...

map देखे जाने की वस्तुओं को लेता है और उन्हें कुछ और में परिवर्तित कर उन्हें मैप करता है उदाहरण के लिए। संख्याओं पर अंकगणित संचालन, ऑब्जेक्ट में आदिम को बदलने या ऑब्जेक्ट से एक कुंजी को हटाने, आदि हो सकता है।

flatMap के कई रूप हैं, लेकिन मूल रूप से यह एक फ़ंक्शन को देखता है, जिसमें प्रत्येक वस्तु के नमूने को देखने योग्य होता है। यह धाराओं की एक धारा बनाता है (जहां स्ट्रीम = अवलोकन = वस्तुओं का अनुक्रम), इसलिए फ्लैटमैप इसे एक एकल धारा / समतल में समतल करता है जहां सभी आइटम अनुक्रम में होते हैं।
एमएमएम, भ्रामक स्पष्टीकरण, मुझे डर है ... चलो समझने के लिए एस्सी आर्ट्स करते हैं।

--A------------------- // First stream
--a1----a2----a3------ // flatMap's function result
-----B---------------- // Second stream
-----b1----b2----b3--- // flatMap's function result
--a1-b1-a2-b2-a3-b3--- // flatMap

flatMapLatest एक फ्लैटमैप है जहां केवल वर्तमान अवलोकन के आइटम उत्सर्जित होते हैं। यदि एक नया अवलोकन होता है, तो पिछले एक के मूल्यों को नजरअंदाज कर दिया जाता है।

--A------------------- // First stream
--a1----a2----a3------ // flatMapLatest's function result
-----B---------------- // Second stream
-----b1----b2----b3--- // flatMapLatest's function result
--a1-b1----b2----b3--- // flatMapLatest

[संपादित करें] मैंने अवधारणाओं को बेहतर ढंग से समझने के लिए कुछ कोड बनाया ... दिखाए जा रहे फ्लैटमैपस्टैटेस्ट स्पष्ट नहीं थे ... मैंने देखा कि यह अजाक्स अनुरोधों पर प्रयोग किया गया था: अगर कोई नया उत्सर्जित हो जाता है, तो पिछले खाते में खाते की आवश्यकता नहीं है )।

डेमो : किसी भी बटन पर एक क्लिक कच्चे ईवेंट दिखाता है

  • एक समृद्ध घटना (नक्शे के साथ) देखने के लिए पहले बटन पर क्लिक करें।
  • 1 सेकंड अंतराल (फ्लैटमैप) पर 5 ईवेंट के अनुक्रम को ट्रिगर करने के लिए दूसरे बटन पर क्लिक करें। यदि आप अनुक्रम समाप्त होने से पहले फिर से क्लिक करते हैं, तो आप चलने वाले अवलोकन से इंटरलेव्ड परिणाम देखते हैं।
  • तीसरा बटन समान रूप से कार्य करता है, लेकिन फ्लैटमैपलाटस्ट का उपयोग करके, एक नया क्लिक पिछले अनुक्रम के परिणामों को छोड़ देता है

// Generic code to display results

var results = document.getElementById('results');
function showHTML(html)
{
  results.insertAdjacentHTML('beforeend', html);
}
function show(text, obj)
{
  showHTML("<p>" + text + (obj !== undefined ? ': ' + JSON.stringify(obj) : '') + "<p>");
}
function showObject(obj)
{
  show("<p>" + JSON.stringify(obj) + "<p>");
}

// The real code

var button1 = document.querySelector('#button1');
var button2 = document.querySelector('#button2');
var button3 = document.querySelector('#button3');
var buttonClickStream1 = Rx.Observable.fromEvent(button1, 'click');
var buttonClickStream2 = Rx.Observable.fromEvent(button2, 'click');
var buttonClickStream3 = Rx.Observable.fromEvent(button3, 'click');

// Raw
Rx.Observable.merge(buttonClickStream1, buttonClickStream2, buttonClickStream3)
  .subscribe(
    function(v) { show("Value", v); },
    function(e) { show("Error", e); },
    function() { show("Done"); }
  );

// Map
buttonClickStream1
  .map(function (e, i) 
  { 
    e.id = i; // Add id
    e.t = new Date(); // Add timestamp
    return e; 
  })
  .subscribe(function(v) { show("Button 1", v) }); // Simplify: no errors, no completion

// FlatMap
buttonClickStream2
  // Returns several values
  .flatMap(function (e, i) 
  { 
    return Rx.Observable
      .interval(1000).take(5)
      .flatMap(function (x, j) { return Rx.Observable.of(i + ' ' + j) });
  })
  .subscribe(function(v) { show("Button 2", v) });

// FlatMapLatest
buttonClickStream3
  // Returns several values but keep only the last one
  .flatMapLatest(function (e, i) 
  { 
    return Rx.Observable
      .interval(1000).take(5)
      .flatMap(function (x, j) { return Rx.Observable.of(i + ' ' + j) });
  })
  .subscribe(function(v) { show("Button 3", v) });
<button type="button" id="button1">Test map</button>
<button type="button" id="button2">Test flatMap</button>
<button type="button" id="button3">Test flatMapLatest</button>
<div id="results"></div>

<script src="http://cdnjs.cloudflare.com/ajax/libs/rxjs/4.0.6/rx.lite.js"></script>

मैं मुख्य रूप से सी # डेवलपर जावास्क्रिप्ट में अपने क्षितिज का विस्तार कर रहा हूं और हाल ही में RXJS नामक एक पुस्तकालय पर ठोकर खाई। मैं समझता हूं कि मैप, फ्लैटमैप, फ्लैटमैप लाटस्ट से संबंधित कैसे हैं और क्या सी # नेट में कोई समतुल्य है?





rxjs