Ich möchte gerne wissen, wie die Methoden .subscribe
und .do
von Observables am besten funktionieren.
Zum Beispiel, wenn ich einen Job machen muss, nachdem die ersten Daten vom Server geladen wurden
%Vor% Ich kann das gleiche mit .subscribe
Welcher ist besser und warum?
Die Observable-Kette wird nichts tun, bis Sie subscribe()
verwenden, das Verbindungen zwischen Operatoren herstellt. Sie müssen also immer die Methode subscribe()
verwenden.
Der Operator do()
soll nur Nebenwirkungen erzeugen.
Nach meiner Erfahrung ist es oft nicht möglich, alles in subscribe()
zu machen, und manchmal müssen Sie do()
verwenden, weil Ihre Anwendungslogik Aktionen in einer bestimmten Reihenfolge ausführen muss.
Im Allgemeinen würde ich versuchen, do()
zu vermeiden und den Großteil meiner Logik in subscribe()
zu legen. Nur wenn ich Aktionen in einer anderen Reihenfolge ausführen müsste, würde ich do()
verwenden.
do
wird für Nebenwirkungen verwendet.subscribe
wird verwendet, um eine Observable aufzurufen. Das Ersetzen vondo
durchsubscribe
führt zu unerwünschten Ergebnissen. Wennsubscribe
durchdo
ersetzt wird, wird der Stream nicht einmal aufgerufen.
Betrachten Sie diese Beispiele:
Verwenden Sie abonnieren :
%Vor%Die Ausgabe des obigen Codes ist
%Vor% Sie können sehen, dass Rx.Observable.create
zweimal ausgeführt wurde. Unser Ziel ist es nur einmal zu machen, aber zusammen mit Aktion 2, Aktion 1 .
Mit do :
%Vor%Die Ausgabe wäre
%Vor%Das wollten wir eigentlich. Wir brauchen Aktion 2, aber vorher Aktion 1.
Warum heißt es Nebenwirkung :
Weil es im Gegensatz zu anderen Operatoren den Fluss nicht beeinflusst. Es nimmt die Antwort, tut etwas und selbst wenn es die Antwort ändert, wird der Stream es ignorieren. Zum Beispiel:
%Vor% Der obige Code gibt immer noch die gleiche Ausgabe wie zuvor. Egal, was Sie in do
ausführen, der Stream wird es ignorieren und mit seiner Ausführung fortfahren.
Wenn wir reine "funktionale reaktive Programmierung" machen, wollen wir keine Nebenwirkungen im Stream. Daher wird
do
abgeraten und meistens nur für Debugging-Zwecke verwendet.
Kaum benötigt man subscribe
in einem Service. Wenn Ihr Datenfluss wirklich reaktiv erfolgt, abonnieren Sie nur Konsumenten (die durch Komponenten in Angular repräsentiert werden), um den gesamten Stream-Shebang auszuführen. Dies ermöglicht eine Stromzusammensetzung, die eine Basis für den reaktiven Ansatz darstellt. Vermeiden Sie, etwas von einem Beobachter in den lokalen Bereich zu speichern, es ist auch gegen Stream-Reinheit. Sie können lieber einen Stream erstellen, um alle notwendigen Daten zu übertragen oder Streams zu kombinieren.
Tags und Links javascript angular rxjs