2015-09-14 5 views
5

प्रत्येक बार जब मैं .subscribe() पर एक अवलोकन पर कॉल करता हूं, तो प्रत्येक मान पर प्रसंस्करण पुनरारंभ होता है (नीचे दिए गए उदाहरण में, मानचित्र फ़ंक्शन को प्रत्येक मान के लिए दो बार बुलाया जाएगा)।पर्यवेक्षक संचालन क्यों हर ग्राहक के लिए एक बार (डुप्लीकेट) कहा जाता है?

var rx = require('rx-lite'); 
var _ = require('lodash'); 

var obs = rx.Observable.fromArray([1, 2]); 

var processing = obs.map(function (number) { 
    // This function is called twice 
    console.log('call for ' + number); 
    return number + 1; 
}); 

processing.subscribe(_.noop, _.noop); 
processing.subscribe(_.noop, _.noop); 

क्या सब्सक्राइब करने का कोई तरीका है कि आप पूरे प्रसंस्करण कार्यों को दोबारा बिना संसाधित मूल्य दें?

उत्तर

4

हाय @ सिमन बोद्रियास आपको Cold vs. Hot Observables के बारे में पता होना चाहिए।

शीत observables सदस्यता पर प्रदर्शन शुरू हो, जैसे कि, नमूदार अनुक्रम केवल पर्यवेक्षकों के मूल्यों को आगे बढ़ाने शुरू होता है जब सदस्यता लें कहा जाता है। मान भी ग्राहकों के बीच साझा नहीं कर रहे हैं ..

अपने मामले में आप connect या refCount

var rx = require('rx-lite'); 
var _ = require('lodash'); 

var obs = rx.Observable.fromArray([1, 2]); 

var processing = obs.map(function (number) { 
    // This function is called twice 
    console.log('call for ' + number); 
    return number + 1; 
}).publish(); 

processing.subscribe(_.noop, _.noop); 
processing.subscribe(_.noop, _.noop); 

processing.connect(); 
साथ publish उपयोग कर सकते हैं
संबंधित मुद्दे