在RxJ中合并两个流而不重放

时间:2017-01-21 18:24:13

标签: rxjs rxjs5

我已经将我的问题解决了这个简单的例子。

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合并。问题在于mergemap中定义的button1Click$被调用两次。假设如果我创建另一个名为even$的流并将其合并,map将被调用三次。查看演示。

如何合并流,以便每次点击只调用map(为button1Click$定义)。

1 个答案:

答案 0 :(得分:1)

share只需button1Clicked$

var button1Click$ = Rx.Observable.fromEvent(document.getElementById('button1'),'click')
                  .map(function(){
                    console.log('Map:all');
                    return "all"
                  })
                  .share();