12

fromArray Rx wiki on githubक्या मैं rx.js के साथ सरणी में जोड़ों को देख सकता हूं?

coffee> rext = require 'rx'             
coffee> arr = [1..5]             
[ 1, 2, 3, 4, 5 ]              
coffee> obs = rext.Observable.fromArray(arr)       
{ _subscribe: [Function] }           
coffee> obs.subscribe((x) -> console.log("added value: " + x))  
added value: 1              
added value: 2              
added value: 3              
added value: 4              
added value: 5              
{ isStopped: true,             
    observer:               
    { isStopped: true,             
    _onNext: [Function],            
    _onError: [Function: defaultError],        
    _onCompleted: [Function: noop] },        
    m: { isDisposed: true, current: null } }       
coffee> arr.push(12) # expecting "added value: 12"            
6      # instead got new length of array            
coffee>   

यह वास्तव में subscribe समारोह केवल आग एक बार, जब यह बनाया तरह दिखता है। ऐसा लगता है कि यह एक गलत नाम है, क्योंकि मैं वास्तव में केवल इसके लिए परिवर्तनों को देखने के बजाय सरणी को प्रत्येक के लिए कर रहा हूं। यह कोड लगभग वही है जैसा कि विकी पर है। तो या तो मैं इसे गलत कर रहा हूं या subscribe काम नहीं करता है कि मैं कैसे उम्मीद करता हूं।

उत्तर

1

Observable.fromArray एक पर्यवेक्षक बनाता है जो एक सब्सक्राइबर जोड़ने पर तुरंत प्रत्येक सरणी वस्तुओं के लिए ईवेंट को सक्रिय करता है। तो, यह उस सरणी में हुए बदलावों को "देख" नहीं पाएगा।

यदि आपको "पुश करने योग्य संग्रह" की आवश्यकता है, तो Bacon.js में बस श्रेणी आप जो खोज रहे हैं वह हो सकती है। आरएक्सजे के लिए मेरा छोटा MessageQueue वर्ग है जिसमें समान कार्यक्षमता है।

+4

इसलिए यह एक ऑब्जर्वर कि ... नहीं करता है। इस सामान के साथ कौन आता है? (बयानबाजी)। MessageQueue के बारे में टिप के लिए धन्यवाद। – jcollum

+0

ओह, और उसके बाद एफआरबी (http://documentup.com/montagejs/frb/) है जो वास्तव में आपको किसी भी जेएस ऑब्जेक्ट पर देखने योग्य बाइंडिंग देगा। या कम से कम किसी वस्तु की कोई संपत्ति। सरणी को सीधे देखने के बारे में निश्चित नहीं है। – raimohanska

+1

किसी अन्य पुस्तकालय का उपयोग करना जो कि "विषय" के साथ बॉक्स से बाहर निकलता है, मेरे परिप्रेक्ष्य से एक अच्छा दृष्टिकोण नहीं है। – TekTimmy

2

मुझे Rx.Observable.ofObjectChanges(obj) मिला जैसा कि मैंने अपेक्षा की थी।

प्रलेखन पृष्ठ से:

Object.observe का उपयोग कर एक वस्तु में परिवर्तन से एक नमूदार अनुक्रम बनाता है।

आशा है कि यह मदद करता है।

+0

शायद ओआर के रूप में 'अरेरे चेंज' का उपयोग करना चाहिए क्योंकि ओपी विशेष रूप से सरणी के बारे में है ... – Lucas

+3

ऑफ ऑब्जेक्ट चेंज अब आरएक्सजेएस 5 में उपलब्ध नहीं है: https://github.com/ReactiveX/rxjs/blob/master/MIGRATION.md – kpup

10

आरएक्सजेएस में जो आप खोज रहे हैं उसे Subject कहा जाता है। आप इसमें डेटा धक्का दे सकते हैं और इसे वहां से स्ट्रीम कर सकते हैं।

उदाहरण:

var array = []; 
var arraySubject = new Rx.Subject(); 

var pushToArray = function (item) { 
    array.push(item); 
    arraySubject.next(item); 
} 

// Subscribe to the subject to react to changes 
arraySubject.subscribe((item) => console.log(item)); 
+0

क्या है आपके उदाहरण में 'सरणी'? @Frederik –

+1

तत्वों वाले वास्तविक सरणी को थकाता है। जब आप किसी तत्व को सरणी में धक्का देते हैं, तो आप arraySubject पर अगला() भी कॉल करते हैं, ताकि आप किसी भी ग्राहक को सूचित कर सकें। आप इसे सीधे अपनी कक्षा में भी बना सकते हैं। –

+0

दोस्त यह कैसे काम करेगा? यदि आप इस विषय की सदस्यता लेते हैं, तो आप पहले से ही सरणी में धक्का देने वाले तत्वों का पालन नहीं करेंगे, है ना? –

संबंधित मुद्दे

 संबंधित मुद्दे