2017-05-07 10 views
0

私はマージ演算子で1つが火災したときにリッスンしているか、両方ともハンドラを1回だけ実行する必要があることを2つ観測できます。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

'.take(1)'試してみてください。 –

+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ストリームを続行する必要があり、そのうち2つが値を同時にプッシュしてハンドラを1回だけ実行する必要があります。 – ng2user

+0

ストリームを続行します。元のストリームとの連結を参照してください。してみてください。 –

関連する問題