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?