2

以下の例では、 onNext 呼び出しごとに map が 2 回呼び出されますが、これは不要です。これは、ds の同じ値を 2 つのオブザーバーに再利用できるためです。マップが onNext 呼び出しごとに 1 回だけ呼び出されるようにコードを記述する方法は? または、約束を使用する必要がありますか?

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

1 に答える 1

5

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   
于 2014-06-06T16:58:13.523 に答える