javascript - 当一次就足够时,RxJs 响应式(Reactive)映射被调用两次

标签 javascript promise reactive-programming rxjs

在下面的示例中,每次 onNext 调用都会调用 map 两次,这是不必要的,因为两个观察者可以重复使用 ds 的相同值。如何编写代码,使得每次 onNext 调用只调用一次 map ?或者我应该使用 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);

最佳答案

最简单的方法是通过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   

关于javascript - 当一次就足够时,RxJs 响应式(Reactive)映射被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24028544/

相关文章:

javascript - 如何根据下拉选择和按钮单击从 MySql 数据库中检索数据?

javascript - 将 (object.function) 作为参数传递

javascript - 在 RxJ 中使用背压进行击键

javascript - 在 AngularJS 中加载异步数据

c# - 将最新值与可观察流中的先前值相结合

javascript - Rxjs:你想在什么场景下使用调度器

javascript - 使用 OpenLayers 3 作为 react 组件

javascript - PDFTron : How to add an input field

php - 如何设置光标离开屏幕?

javascript - 为什么我的 Dojo ContentPane 在加载内容后没有兑现其 promise ?