Como o operador share () do RxJs 5 funciona?
Não está 100% claro para mim como os RxJs 5share()
operador funciona, veja aqui odocumentos mais recentes. Jsbin para a perguntaaqui.
Se eu criar um observável com uma série de 0 a 2, cada valor será separado por um segundo:
var source = Rx.Observable.interval(1000)
.take(5)
.do(function (x) {
console.log('some side effect');
});
E se eu criar dois assinantes desse observável:
source.subscribe((n) => console.log("subscriptor 1 = " + n));
source.subscribe((n) => console.log("subscriptor 2 = " + n));
Eu recebo isso no console:
"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"
Eu pensei que cada assinatura se inscreveria no mesmo Observable, mas não parece ser o caso! É como o ato de assinar cria um Observable completamente separado!
Mas se oshare()
operador é adicionado à fonte observável:
var source = Rx.Observable.interval(1000)
.take(3)
.do(function (x) {
console.log('some side effect ...');
})
.share();
Então temos isso:
"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"
Qual é o que eu esperaria sem oshare()
.
O que está acontecendo aqui, como oshare()
operador trabalha? Cada assinatura cria uma nova cadeia Observable?