Wie funktioniert der RxJs 5 share () Operator?

Ist mir nicht 100% klar, wie die RxJs 5share() Operator funktioniert, siehe hier daslatest docs. Jsbin für die FrageHie.

Wenn ich eine Observable mit einer Reihe von 0 bis 2 erstelle, wird jeder Wert durch eine Sekunde getrennt:

var source = Rx.Observable.interval(1000)
.take(5)
.do(function (x) {
    console.log('some side effect');
});

Und wenn ich zwei Abonnenten für dieses Observable erstelle:

source.subscribe((n) => console.log("subscriptor 1 = " + n));
source.subscribe((n) => console.log("subscriptor 2 = " + n));

Ich bekomme das in der Konsole:

"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"

Ich dachte, jedes Abonnement würde dasselbe Observable abonnieren, aber das scheint nicht der Fall zu sein! Es ist so, als würde ein Abonnement einen völlig separaten Observable! @ Erstelle

Aber wenn dasshare()er Operator @ wird zur beobachtbaren Quelle hinzugefügt:

var source = Rx.Observable.interval(1000)
.take(3)
.do(function (x) {
    console.log('some side effect ...');
})
.share();

Dann bekommen wir das:

"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"

Was ist was ich ohne das @ erwarten würshare().

Was ist hier los, wie funktioniert dasshare()operator Arbeit? Erstellt jedes Abonnement eine neue Observable-Kette?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage