2017-11-15 1 views
1

Dies funktioniert:beobachtbare schließlich nicht gefeuert zu werden

this.http.get('/doesntexist1') 
    .finally(() => console.log('finally1')) 
    .subscribe(() => { }); 

Aber dies nicht:

const obs = this.http.get('/doesntexist2'); 
obs.finally(() => console.log('finally2')) 
obs.subscribe(() => { }); 

Beide URL erzeugen einen 404.

ich beide laufen und ich sehe nur „finally1 "Wird in der Konsole angezeigt, irgendeine Idee warum?

Antwort

4

Der Unterschied ist, dass im zweiten Beispiel die .finally nicht im selben Stream wie die .subscribe ist, da Sie sie nicht verketten.

Ihr erstes Beispiel wird dieser Strom:

get -> finally -> subscribe 

Ihr zweites Beispiel erstellt zwei Zweige:

get -> finally 
get -> subscribe 

Die schließlich gewohnt ohne Abonnement, nachdem sie ausgeführt werden.

Wenn Sie einen Stream erstellen möchten, müssen Sie die Operatoren verketten, indem Sie das Ergebnis des vorherigen Operators verwenden. Es ist nicht wie ein In-Place-Operator.

+0

Vielen Dank, ich werde Ihre Antwort in 5 Minuten akzeptieren. – bananasplit