RxJs-Abonnenten, die Nullwerte übergeben?

8

Ich habe den Tag damit verbracht, mit Angular2 in RxJS einzutauchen, da die Modellierung von Benutzeroberflächen als Stream für mich neu ist.

Ich experimentiere mit einem Benutzerdienst, der einen Strom von Benutzerobjekten bereitstellt. Das erste Objekt User wird bereitgestellt, wenn der Benutzer authentifiziert wird. Zusätzliche User -Objekte können bereitgestellt werden, wenn der Benutzer aktualisiert wird, z. Sie aktualisieren ihr Profil. Wenn der Benutzer beim Laden der Anwendung oder beim Abmelden nicht angemeldet wird, wird null ausgegeben.

Eine Beobachterimplementierung in einer Komponente würde daher so aussehen:

%Vor%

Das userService.user$ Observable ist ein BehaviorSubject type. Wie würdest du das umsetzen? Die Idee, null an einen Stream zu senden, der ein User -Objekt erwartet, passt nicht zu mir. Gleichzeitig bietet es jedoch eine bequeme Möglichkeit, die Frage zu beantworten: Ist der Benutzer verfügbar oder nicht?

    
robertjd 20.05.2016, 23:41
quelle

1 Antwort

13

"Reaktiv zu werden" muss wirklich ein Alles-oder-Nichts-Ding sein, IMO. Dies ist ein wirklich guter neuer Artikel zu diesem Thema im Allgemeinen.

Was speziell Angular2-Apps betrifft, bedeutet dies, dass Sie Dinge als Streams überall von Ende zu Ende modellieren möchten - von den HTTP-Antworten, die Daten liefern, zu den Vorlagen, die für die Anzeige verwendet werden .

Also in Ihrem Fall, anstatt:

%Vor%

Sie möchten etwas tun wie:

%Vor%

Das Wichtigste, was Sie hier beachten sollten, ist, dass Sie Ihren Anwendungsstatus als Stream vom Dienst (der vermutlich eine beobachtbare API-Antwort vermittelt) zur Komponente der Vorlage modellieren, wo Sie %Co%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% $ Änderungen nach Bedarf reflektieren.

Als Antwort auf @ MarkRajcoks Kommentar:

  

Apropos subscribe () ... brauchst du nicht einen auf deiner letzten Zeile von ngOnInit ()?

Nein, und das ist eigentlich ein wichtiger Punkt. Das Schöne an AsyncPipe ist, dass Sie nicht manuell etwas abonnieren müssen, lassen Sie es einfach von Angular erledigen. Dadurch wird ein Minenfeld möglicher Probleme bei der Erkennung von Änderungen umgangen, die durch die manuelle Handhabung dieser Dinge entstehen können.

  

Aber wie gehen Sie mit Fehlern um? Angenommen, Sie erhalten einen Fehler, wenn Sie versuchen, einen Benutzer aus dem Back-End zu erhalten. Wenn Sie NgIf verwenden möchten, um entweder einen Fehler anzuzeigen oder den Benutzer anzuzeigen, müssen Sie nicht manuell subscribe () und "die Kette unterbrechen"?

Nicht unbedingt. Observable.catch () ist sehr nützlich für diese Zwecke:

%Vor%

Meine Botschaft hier ist nicht, dass es nie notwendig ist, Dinge manuell zu abonnieren (natürlich gibt es Situationen, in denen das der Fall ist), sondern dass wir es vermeiden sollten, wo immer es möglich ist . Und je bequemer ich mit rx komme, desto seltener erkenne ich diese Situationen.

    
drewmoore 21.05.2016, 01:51
quelle