2017-05-07 134 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。请尝试。 –