Letzte Aktualisierung: Mai 2020.
combinLatest (Observablen)
Aus der reactiveX- Dokumentation :
Immer wenn eine Eingabe Observable einen Wert ausgibt, berechnet sie eine Formel unter Verwendung der neuesten Werte aus allen Eingaben und gibt dann die Ausgabe dieser Formel aus.
(Update: Mai 2020) Während das andere Beispiel gültig bleibt, gibt es hier eine neue Syntax:
const name$ = this._personService.getName(id);
const document$ = this._documentService.getDocument();
name$.combineLatest(document$, (name, document) => {name, document})
.subscribe(pair => {
this.name = pair.name;
this.document = pair.document;
this.showForm();
})
combinLatest (Observables) (alternative Syntax):
const name$ = this._personService.getName(id);
const document$ = this._documentService.getDocument();
combineLatest(name$, document$, (name, document) => ({name, document}))
.subscribe(pair => {
this.name = pair.name;
this.document = pair.document;
this.showForm();
})
zip vs combinLatest
(Update: Okt. 2018)
Ich habe zuvor die Verwendung derzip
Methode vorgeschlagen. Für einige AnwendungsfällecombineLatest
hat dies jedoch einige Vorteile gegenüberzip
. Daher ist es wichtig, die Unterschiede zu verstehen.
CombineLatest
gibt die zuletzt emittierten Werte von Observablen aus. Während die zip
Methode die ausgegebenen Elemente in der Reihenfolge ihrer Reihenfolge ausgibt .
Zum Beispiel, wenn Observable # 1 sein drittes Element ausstrahlt und Observable # 2 sein 5. Element ausgibt. Das Ergebnis unter Verwendung der zip
Methode ist der 3. emittierte Wert von beiden observables
.
In dieser Situation ist das Ergebnis combineLatest
die 5. und 3 .. das fühlt sich natürlicher an.
Observable.zip (Observables)
(Ursprüngliche Antwort: Jul, 2017) Die Observable.zip-Methode wird in der reactiveX-Dokumentation erläutert:
Kombiniert mehrere Observables, um ein Observable zu erstellen, dessen Werte aus den Werten der eingegebenen Observables in der Reihenfolge berechnet werden.
const name$ = this._personService.getName(id);
const document$ = this._documentService.getDocument();
Observable
.zip(name$, document$, (name: string, document: string) => ({name, document}))
.subscribe(pair => {
this.name = pair.name;
this.document = pair.document;
this.showForm();
})
eine Randnotiz (gilt für beide Methoden)
Der letzte Parameter, für den wir eine Funktion bereitgestellt haben, (name: string, document: string) => ({name, document})
ist optional. Sie können es überspringen oder komplexere Vorgänge ausführen:
Wenn der letzte Parameter eine Funktion ist, wird diese Funktion verwendet, um den erstellten Wert aus den Eingabewerten zu berechnen. Andernfalls wird ein Array der Eingabewerte zurückgegeben.
Wenn Sie also den letzten Teil überspringen, erhalten Sie ein Array:
const name$ = this._personService.getName(id);
const document$ = this._documentService.getDocument();
Observable
.zip(name$, document$)
.subscribe(pair => {
this.name = pair['0'];
this.document = pair['1'];
this.showForm();
})