RxJs 5share()
オペレーターがどのように機能するかは、100% 明確ではありません。こちらの最新のドキュメントを参照してください。ここでの質問の Jsbin 。
一連の 0 から 2 でオブザーバブルを作成すると、各値は 1 秒で区切られます。
var source = Rx.Observable.interval(1000)
.take(5)
.do(function (x) {
console.log('some side effect');
});
このオブザーバブルに 2 つのサブスクライバーを作成すると、次のようになります。
source.subscribe((n) => console.log("subscriptor 1 = " + n));
source.subscribe((n) => console.log("subscriptor 2 = " + n));
コンソールでこれを取得します:
"some side effect ..."
"subscriptor 1 = 0"
"some side effect ..."
"subscriptor 2 = 0"
"some side effect ..."
"subscriptor 1 = 1"
"some side effect ..."
"subscriptor 2 = 1"
"some side effect ..."
"subscriptor 1 = 2"
"some side effect ..."
"subscriptor 2 = 2"
各サブスクリプションは同じ Observable にサブスクライブすると思っていましたが、そうではないようです! サブスクライブするという行為は、完全に別の Observable を作成するようなものです!
ただし、share()
オペレーターがソース オブザーバブルに追加されている場合:
var source = Rx.Observable.interval(1000)
.take(3)
.do(function (x) {
console.log('some side effect ...');
})
.share();
次に、これを取得します。
"some side effect ..."
"subscriptor 1 = 0"
"subscriptor 2 = 0"
"some side effect ..."
"subscriptor 1 = 1"
"subscriptor 2 = 1"
"some side effect ..."
"subscriptor 1 = 2"
"subscriptor 2 = 2"
これは、なしで私が期待するものshare()
です。
ここで何が起こっているのですか、share()
オペレーターはどのように機能しますか? 各サブスクリプションは新しい Observable チェーンを作成しますか?