Javascript 当一次调用足够时,RxJs反应映射被调用两次

Javascript 当一次调用足够时,RxJs反应映射被调用两次,javascript,promise,reactive-programming,rxjs,Javascript,Promise,Reactive Programming,Rxjs,在下面的示例中,每个onNext调用两次map,这是不必要的,因为ds的相同值可以被两个观察者重用。如何编写代码,以便每次onNext调用只调用一次map?还是我应该用承诺 var subject = new Rx.BehaviorSubject(42); var ds = subject.map(function(x) { console.log("processing"); return x + 100; }); var subscription1 = d

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

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);

最简单的方法是通过运营商“共享”订阅

这是最简单的方法:

var主体=新的接收行为主体(42);
var ds=subject.map(函数(x){
控制台日志(“处理”);
返回x+100;
}).share();
var subscription1=ds.subscription(
功能(x){
log('第一次观察:'+x.toString());
}
);
var subscription2=ds.subscription(
功能(x){
log('观察到的第二个:'+x.toString());
}
);
主题.onNext(56);
主题.onNext(134);
//=>处理
//=>首次观察:142
//=>处理
//=>首次观察:156
//=>第二次观察:156
//=>处理
//=>首次观察:234
//=>第二次观察:234

谢谢,很高兴知道。然而,我真的很想知道这是什么设计,它不会隐式地共享——你能帮我一个快速链接吗?