【问题标题】:Merge two streams in RxJs without replay合并 RxJs 中的两个流而不重放
【发布时间】:2017-01-21 18:24:13
【问题描述】:

我已将我的问题简化为这个简单的示例。

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

我通过过滤点击流创建了点击流和奇数点击流(基于当前时间)。 现在我想要一个单一的流,它接收事件“全部”和“奇数”。 所以我将这两个流与merge 合并。问题在于mergebutton1Click$ 中定义的map 被调用了两次。假设如果我创建另一个名为 even$ 的流并将其也合并,map 将被调用三次。查看演示。

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

【问题讨论】:

    标签: rxjs rxjs5


    【解决方案1】:

    只需sharebutton1Clicked$

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2020-09-19
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    相关资源
    最近更新 更多