Его не на 100% ясно для меня, как работает оператор RxJs 5 share()
, см. Здесь latest docs. Jsbin для вопроса here.Как работает оператор RxJs 5 share()?
Если я создаю наблюдаемый с серией 0 до 2, каждого значения, разделенного одним вторых:
var source = Rx.Observable.interval(1000)
.take(5)
.do(function (x) {
console.log('some side effect');
});
И если я создаю два абонентов эту наблюдаемый:
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"
Я думал, что каждая подписка будет подписана на тот же Наблюдаемый, но, похоже, это не так! Его, как акт подписки, создает совершенно отдельный Наблюдаемый!
Но если оператор 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?