2015-09-14 44 views
5

每次我在Observable上調用.subscribe()時,將重新啓動每個值的處理(在下面的示例中,將爲每個值調用map函數兩次)。爲什麼Observable操作爲每個用戶調用一次(重複)?

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

嗨@Simon Boudrias你應該知道的關於Cold vs. Hot Observables

冷觀察者在訂閱時開始運行,即,當調用Subscribe時,可觀察序列只開始向觀察者推送值。 值也沒有用戶共享..

你的情況,你可以使用publishconnectrefCount

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(); 
相關問題