RxJS - .subscribe () vs .publish (). Connect ()

Dies ist hauptsächlich eine Frage zu Best Practices und Vorgehensweisen bei RxJs, da mein POC-Code funktioniert, ich aber noch keine Erfahrung mit RxJs habe.

Die Frage läuft auf @ hina.subscribe() vs.publish().connect(), da beide anscheinend dasselbe tun.

In meiner angle2-App gibt es eine Schaltfläche, die eine Funktion zum Abmelden des Benutzers aufruft, die eine Funktion in meinem Dienst aufruft, die einige serverseitige Aktionen ausführt und mir eine URL zurückgibt, zu der der Benutzer umgeleitet werden kann. Um die Anfrage zu starten, rufe ich @ .subscribe(), damit der Observable beginnt, Werte zu produzieren. Ich habe einen Artikel über "Cold vs Hot Observables" gelesen und es wäre ein anderer Ansatz, @ anzurufe.publish().connect() Anstatt von.subscribe(). Gibt es irgendwelche Vorteile für beide Ansätze?

<a (click)="logout()">Logout</a>

Die Abmeldefunktion sieht folgendermaßen aus:

logout.component.ts

logout() { this.authService.logout(); }

Und der Dienst (tatsächliche Abmeldung) sieht folgendermaßen aus:

auth.service.ts

logout() : Observable<boolean>  {
        this.http.get(this.location.prepareExternalUrl('api/v1/authentication/logout'))
            .map(this.extractData)
            .catch(this.handleError)
            .do((x: string) => { window.location.href = x; })
            .subscribe();    // Option A - 

        return Observable.of(true);

    }

auth.service.alternative.ts

logout() : Observable<boolean>  {
        this.http.get(this.location.prepareExternalUrl('api/v1/authentication/logout'))
            .map(this.extractData)
            .catch(this.handleError)
            .do((x: string) => { window.location.href = x; })
            .publish()  // Option B - Make connectable observable
            .connect(); // Option B - Cause the connectable observable to subscribe and produce my value       

        return Observable.of(true);
    }

Antworten auf die Frage(4)

Ihre Antwort auf die Frage