2017-05-07 133 views
0

我有兩個觀察到的,我聽着也與合併操作時,其中一個是火,或兩者我只需要執行一次處理,我怎麼能做到這一點與RX?Rxjs執行處理器只有一次

var source1 = Rx.Observable.interval(1000); 

var source2 = Rx.Observable.interval(1000); 

var source = Rx.Observable.merge(
    source1, 
    source2) 
    .subscribe(() => console.log('This needs to run only once and not kill the stream')) 
+0

嘗試'。取(1)'。 – 2017-05-07 12:57:34

+0

嘗試'.first()' – Maxime

+2

'take(1)','first()','single()'。請參閱http://stackoverflow.com/questions/42345969/angular-2-using-rxjs-take1-vs-first/42346203#42346203。也許'forkJoin',但這取決於你想要做什麼。 – martin

回答

0

您可以使用多播

可選的選擇功能,可以使用多播源流作爲根據需要多次選擇功能,而不會造成多次預訂源流。給定來源的訂閱者將從訂閱期間收到所有來源的通知。

http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-multicast

function factory() { 
    return new Rx.Subject(); 
} 

source.multicast(factory, function(shared) { 
    return shared.take(1).do(x=>console.log(x)).concat(shared); 
}) 
.subscribe(); 
+0

我不能拿1我需要繼續流,如果他們兩個同時推動值只運行一次處理程序。 – ng2user

+0

它將繼續流。看到與原始流的concat。請嘗試。 –