0
私はこの簡単な例で問題を解消しました。リプレイを使わずにRxJsで2つのストリームをマージする
var button1Click$ = Rx.Observable.fromEvent(document.getElementById('button1'),'click')
.map(function(){
console.log('Map:all');
return "all"
})
var odd$ = button1Click$.filter(function(){
return (Date.now() %2 === 1);
})
.map(function(){
console.log('Map:odd');
return "odd"
})
var combined$ = button1Click$.merge(odd$);
combined$.subscribe(function(ev){
console.log(ev);
});
Demo: https://jsbin.com/diredeb/edit?js,console,output
Iは、クリックストリームとクリックストリームをフィルタリングすることによって(現在時刻に基づいて)奇数のクリックストリームを作成しています。 今、イベント「all」と「odd」の両方を受け取る単一のストリームが必要です。 この2つのストリームをmerge
にマージしています。問題はmerge
で、button1Click$
で定義されているmap
が2回呼び出されています。私がeven$
という別のストリームを作成してマージしたとすると、map
が3回呼び出されているとします。デモを確認してください。
map
(button1Click$
に定義されています)がクリックごとに1回だけ呼び出されるようにストリームをマージする方法を教えてください。
説明することができますか? –
'.share()'は複数のサブスクライバ間でストリームを共有するので、ストリーム自体は常に1回だけ実行されますが、すべてのサブスクライバは送信されたデータを受け取ります。 - ここに、(古い)ドキュメントへのリンクがあります。これは基本的にあなたの非常に重要な問題を基本的に説明しています:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/share.md – olsn