.do () oder .subscribe ()

9

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

machen %Vor%

Welcher ist besser und warum?

    
mgrinko 26.07.2017, 08:32
quelle

3 Antworten

3

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.

    
martin 26.07.2017 08:40
quelle
3
  

do wird für Nebenwirkungen verwendet. subscribe wird verwendet, um eine Observable aufzurufen. Das Ersetzen von do durch subscribe führt zu unerwünschten Ergebnissen. Wenn subscribe durch do 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.

    
Skeptor 26.07.2017 12:53
quelle
2

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.

    
Sergiy Pereverziev 26.07.2017 09:33
quelle

Tags und Links