【问题标题】:RxJs reactive map is called twice when once is sufficient当一次足够时,RxJs 反应映射被调用两次
【发布时间】:2014-06-04 03:33:20
【问题描述】:

在下面的示例中,每次 onNext 调用都会调用 map 两次,这是不必要的,因为 ds 的相同值可以被两个观察者重用。如何编写代码以使每次 onNext 调用只调用一次地图?还是应该使用 Promise?

var subject = new Rx.BehaviorSubject(42);

var ds = subject.map(function(x) {
        console.log("processing");
        return x + 100;
});

var subscription1 = ds.subscribe(
    function (x) {
        console.log('first observed: ' + x.toString());
    }
);

var subscription2 = ds.subscribe(
    function (x) {
        console.log('second observed: ' + x.toString());
    }
);

subject.onNext(56);
subject.onNext(134);

【问题讨论】:

    标签: javascript promise reactive-programming rxjs


    【解决方案1】:

    最简单的方法是通过share 运算符“共享”订阅。

    这是最简单的方法:

    var subject = new Rx.BehaviorSubject(42);
    
    var ds = subject.map(function(x) {
            console.log("processing");
            return x + 100;
    }).share();
    
    var subscription1 = ds.subscribe(
        function (x) {
            console.log('first observed: ' + x.toString());
        }
    );
    
    var subscription2 = ds.subscribe(
        function (x) {
            console.log('second observed: ' + x.toString());
        }
    );
    
    subject.onNext(56);
    subject.onNext(134);
    
    // => processing
    // => first observed: 142
    // => processing
    // => first observed: 156
    // => second observed: 156
    // => processing
    // => first observed: 234
    // => second observed: 234   
    

    【讨论】:

    • 谢谢,很高兴知道。但是,我很想知道这是什么设计没有隐含 share - 你能帮我提供一个快速链接吗?
    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 2016-09-25
    • 2021-03-04
    • 2021-03-04
    相关资源
    最近更新 更多