Non è al 100% chiaro per me come funziona l'operatore RxJs 5 share()
, vedere qui lo latest docs. Jsbin per la domanda here.Come funziona l'operatore sharex() di RxJs 5?
Se creo un osservabile con una serie di 0 e 2, ciascun valore separato di un secondo:
var source = Rx.Observable.interval(1000)
.take(5)
.do(function (x) {
console.log('some side effect');
});
E se creo due utenti alla osservabile:
source.subscribe((n) => console.log("subscriptor 1 = " + n));
source.subscribe((n) => console.log("subscriptor 2 = " + n));
ottengo questo nella 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"
Ho pensato che ogni sottoscrizione avrebbe sottoscritto lo stesso Osservabile, ma non sembra essere il caso! È come se l'atto di sottoscrizione crea un Osservabile completamente separato!
Ma se l'operatore share()
viene aggiunto alla fonte osservabile:
var source = Rx.Observable.interval(1000)
.take(3)
.do(function (x) {
console.log('some side effect ...');
})
.share();
allora otteniamo questo:
"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"
Che è quello che mi sarei aspettato senza la share()
.
Cosa sta succedendo qui, come funziona l'operatore share()
? Ogni abbonamento crea una nuova catena Observable?