Как работает оператор RxJs 5 share ()?
Это не на 100% ясно для меня, как RxJs 5share()
оператор работает, см. здесьпоследние документы, Jsbin за вопросВот.
Если я создаю наблюдаемую с серией от 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"
Я думал, что каждая подписка будет подписываться на одну и ту же 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()
оператор работает? Создает ли каждая подписка новую цепочку наблюдаемых?