Ebenfalls:
combinLatest (...) führt Observables nacheinander aus
combineLatest
intern verwendet concat
, was bedeutet, dass für jede im Array beobachtbare Größe ein Wert ermittelt werden muss, bevor mit der nächsten fortgefahren werden kann.
// partial source of static combineLatest (uses the rxjs/operators combineLatest internally):
// If you're using typescript then the output array will be strongly typed based on type inference
return function (source) { return source.lift.call(from_1.from([source].concat(observables)),
new combineLatest_1.CombineLatestOperator(project)); };
forkJoin (...) führt gleichzeitig Observables parallel aus
Wenn Sie 3 Observable-Quellen haben und deren Ausführung jeweils 5 Sekunden dauert, dauert die Ausführung 15 Sekunden combineLatest
. Während forkJoin
sie parallel ausgeführt werden, dauert es 5 Sekunden.
Funktioniert also forkJoin
eher dort, Promise.all(...)
wo die Reihenfolge nicht durchgesetzt wird.
Überlegungen zur Fehlerbehandlung:
Wenn eines der Observablen fehlerhaft ist - mit combineLatest
den folgenden wird es nicht ausgeführt, aber mit forkJoin
ihnen laufen alle. So combineLatest
kann nützlich sein , eine ‚Folge‘ von Observablen auszuführen und alle zusammen das Ergebnis zu sammeln.
Erweiterter Hinweis: Wenn die Quell-Observables bereits ausgeführt werden (von etwas anderem abonniert) und Sie share
sie verwenden, wird dieses Verhalten nicht angezeigt.
Noch weiter fortgeschrittener Hinweis: CombineLatest gibt Ihnen immer das Neueste aus jeder Quelle. Wenn also eine der beobachtbaren Quellen mehrere Werte ausgibt, erhalten Sie das Neueste. Es wird nicht nur ein einzelner Wert für jede Quelle abgerufen und zur nächsten übergegangen. Wenn Sie sicherstellen müssen, dass Sie nur das nächste verfügbare Element für jede beobachtbare Quelle erhalten, können Sie .pipe(take(1))
die beobachtbare Quelle hinzufügen , während Sie sie dem Eingabearray hinzufügen.
combineLatest()
undforkJoin()
Funktionen , die eine beobachtbare erstellen. Sie machen dasselbe, aber die Syntax ist unterschiedlich. Verwechseln Sie nicht,combineLatest
vonrxjs/operators
welchem ein "pipeable" Operator ist. Wenn Sie den falschen importieren, werden Fehler angezeigt.