我已经将我的问题解决了这个简单的例子。
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
我通过过滤点击流创建了点击流和奇数点击流(基于当前时间)。
现在我想要一个单一的流,它接收'all'和'odd'两个事件。
所以我将这两个流与merge
合并。问题在于merge
,map
中定义的button1Click$
被调用两次。假设如果我创建另一个名为even$
的流并将其合并,map
将被调用三次。查看演示。
如何合并流,以便每次点击只调用map
(为button1Click$
定义)。
答案 0 :(得分:1)
share
只需button1Clicked$
:
var button1Click$ = Rx.Observable.fromEvent(document.getElementById('button1'),'click')
.map(function(){
console.log('Map:all');
return "all"
})
.share();