Не для меня 100% понятно, как работает оператор RxJs 5 share()
, см. здесь последние документы. 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, но, похоже, это не так! Его, как акт подписки, создает совершенно отдельный Наблюдаемый!
Но если оператор 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?